欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HashMap的处理原理  

程序员文章站 2023-12-26 20:22:22
...

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);


HashMap的处理原理
            
    
    
         
 

上面这些数的哈希值并不冲突,但是哈希值对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的总数有关

  • HashMap的处理原理
            
    
    
         
  • 大小: 57.1 KB

上一篇:

下一篇: