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


               e.next = newMap[index
;                newMap[index
= e;
           
       
   

\n

在这个rehash()方法中我们可以看到容量扩大两倍+1 , 同时需要将原来HashTable中的元素一一复制到新的HashTable中 , 这个过程是比较消耗时间的 , 同时还需要重新计算hashSeed的 , 毕竟容量已经变了 。

\n

这里对阀值啰嗦一下:比如初始值11、加载因子默认0.75 , 那么这个时候阀值threshold=8 , 当容器中的元素达到8时 , HashTable进行一次扩容操作 , 容量 = 8 * 2 + 1 =17 , 而阀值threshold=17*0.75 = 13 , 当容器元素再一次达到阀值时 , HashTable还会进行扩容操作 , 依次类推 。

\n

下面是计算key的hash值 , 这里hashSeed发挥了作用 。

\n

private int hash(Object k) {        return hashSeed ^ k.hashCode();

推荐阅读