前言:
在 JDK7 版本下,很多人都知道 HashMap 会有链表成环的问题,但大多数人只知道,是多线程引起的,至于具体细节的原因,和 JDK8 中如何解决这个问题,很少有人说的清楚,百度也几乎看不懂,本文就和大家聊清楚两个问题:
- JDK7 中 HashMap 成环原因;
- JDK8 中是如何解决的。
一、JDK7 中 HashMap 成环原因
成环的时机
- HashMap 扩容时。
- 多线程环境下。
成环的具体代码位置
在扩容的 transfer 方法里面,有三行关键的代码,如下:
void transfer(Entry[] newTable, boolean rehash) {
int newCapacity = newTable.length;
for (Entry<K,V> e : table) {
//e为空时循环结束
while(null != e) {
Entry<K,V> next = e.next;
if (rehash) {
e.hash = null == e.key ? 0 : hash(e.key);
}
int i = indexFor(e.hash, newCapacity
版权声明:本文为m0_45270667原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。