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

后面添加的entry反而会接到前面 。

\n

一、是链的产生 。

\n

这是一个非常优雅的设计 。 系统总是将新的Entry对象添加到bucketIndex处 。 如果bucketIndex处已经有了对象 , 那么新添加的Entry对象将指向原有的Entry对象 , 形成一条Entry链 , 但是若bucketIndex处没有Entry对象 , 也就是e==null那么新添加的Entry对象指向null , 也就不会产生Entry链了 。

\n

二、扩容问题 。

\n

随着HashMap中元素的数量越来越多 , 发生碰撞的概率就越来越大 , 所产生的链表长度就会越来越长 , 这样势必会影响HashMap的速度 , 为了保证HashMap的效率 , 系统必须要在某个临界点进行扩容处理 。

\n

该临界点在当HashMap中元素的数量等于table数组长度*加载因子 。 但是扩容是一个非常耗时的过程 , 因为它需要重新计算这些数据在新table数组中的位置并进行复制处理 。 所以如果我们已经预知HashMap中元素的个数 , 那么预设元素的个数能够有效的提高HashMap的性能 。

推荐阅读