一文读懂HashMap和HashTable的区别以及常见面试题( 九 )

\n

如果两个hash值相等且key值相等(e.hash == hash && ((k = e.key) == key || key.equals(k)))则用新的Entry的value覆盖原来节点的value 。 如果两个hash值相等但key值不等 , 则将该节点插入该链表的链头 。 具体的实现过程见addEntry方法 , 如下:

\n

void addEntry(int hash K key V value int bucketIndex) {
       //获取bucketIndex处的Entry        Entry<K V> e = table[bucketIndex
;        //将新创建的 Entry 放入 bucketIndex 索引处 , 并让新的 Entry 指向原来的 Entry
       table[bucketIndex
= new Entry<K V>(hash key value e);
       //若HashMap中元素的个数超过极限了 , 则容量扩大两倍        if (size++ >= threshold)
           resize(2 * table.length);
   

\n

这个方法中有两点需要注意:

\n

推荐阅读