代码回顾
我常常听别人说,不要在并发情况下使用HashMap,可能会出现死循环,这个死循环是怎么形成的呢?
我们都知道,HashMap的底层是由数组加链表来实现的
当往HashMap中put一个键值对时,如果HashMap中的键值对数量 size 大于或等于阈值(threshold) 并且null != table[bucketIndex] 时会进行扩容
bucketIndex为该键值对最后被散列到hash表table的位置
比如 table的初始容量为4,加载因子为0.75,此时阈值为3,table已有三个元素,现在put一个元素<1,”A”>,<1,”A”>被散列到table[1]处,而table[1] != null,此时满足扩容条件
阈值 = 容量 * 加载因子
threshold = capacity * loadFactor
扩容时先生成一个是table大小2倍的newTable,然后把table中的元素迁移到newTable中,