HashMap的处理原理
Map<Integer,Integer> a = new HashMap<Integer,Integer>();
a.put(3,3);
a.put(18,18);
a.put(33,33);
a.put(48,48);
a.put(71,71);
a.put(86,86);
a.put(101,101);
a.put(116,116);
a.put(138,138);
a.put(155,155);
a.put(168,168);
a.put(185,185);
a.put(206,206);
a.put(223,223);
a.put(236,236);
上面这些数的哈希值并不冲突,但是哈希值对16取模都等于3,所以造成他们都位于一条链上,即table[3]上
相当于此时table是这样的状态
table[0]=null;
table[1]=null;
table[2]=null;
table[3]=entry[185]->entry[168]->entry[155]->entry[138]......->entry[3]
table[4]=null;
.....
table[15]=null;
当大于size>=threshold后,开始进行resize操作,table会变成一个新的,size=32的数组
此时需要将原有数据移动到这里,那会乱吗?根据推算不会,会产生两个数据链
table[0]=null;
table[1]=null;
table[2]=null;
table[3]=entry[168]->entry[138]->......->entry[3]
table[4]=null;
.....
table[19]=entry[185]->entry[155]->......->entry[18]
.....
table[31]=null;
resize触发条件和table数组实际被占数无关,和entry的总数有关