HashMap的工作原理
- HashMap底层由数组实现,是基于hashing原理,我们通过put()和get()方法存储和获取对象。
- 在存储时,首先我们通过key的hashCode()方法拿到key的哈希值,然后我们通过哈希算法,用拿到的哈希值计算出这个key、value节点的引用在数组中存放的位置,完成存储。
- 在获取时,我们同样根据key的哈希值,通过同样的哈希算法,获取到该节点在数组中的位置。
如果两个不同的key计算得到的hashcode相同会怎样
- 首先,我们的key、value是以一个节点对象存储的,数组当中存放的是该节点的引用。
- 其次,该节点实现了链表结构。
- 在存储时如果数组中对应位置已经存在有效节点,我们会将新的节点的引用放到这个位置,然后这个新的节点的next成员变量指向之前这个位置的旧节点的引用。
- 在获取的时候,我们首先在数组中找到这个位置,然后遍历,根据键对象的equals()方法确定出具体的值。
HashMap与HashTable的异同
- HashMap不是线程安全的
- HashMap可以允许key或者value为null。
参考:
https://www.jianshu.com/p/45fa4e80b631