美文网首页
HashMap和ConcurrentHashMap

HashMap和ConcurrentHashMap

作者: 徐振杰 | 来源:发表于2019-04-10 19:01 被阅读0次

    ConcurrentHashMap是将他分为了多个segment,一个元素进来,先计算哈希值,然后分配给一个segment然后只对这个segment加锁,所以效率要比HashTable高很多。
    HashMap是由数组和链表组成的,首先一个数进来,计算一下哈希值,如果是第一个值,那么程序就会先分配一个16大小的数组,然后看一下自己要加入的位置是否有元素,如果没有重复,就新建一个节点来保存,如果有了那么就把原来的节点给覆盖掉,如果数组的这个位置的节点数超过了八个,那么就把链表变成一个红黑树,如果数组的容量不足了,那么就resize扩容一下。

    然后把hash(key)返回的哈希值与HashMap的初始容量(也叫初始数组的长度)减一做&(与运算)就可以计算出此键值对应该保存到数组的那个位置上(hash&(n-1))。这里为什么不用key本身的hashcode方法,而又是右移动16位又是异或操作。开发人员这样做的目的是什么呢?我的理解是当数组容量很小的时候,计算元素在数组中的位置(n-1)&hash,只用到了hash值的低位,这样当不同的hash值低位相同,高位不同的时候会产生冲突。实际上的hash值将hashcode低16位与高16位做异或运算,相当于混合了高位和低位,增加了随机性。当然是冲突越少越好,元素的分布越随机越好。

    相关文章

      网友评论

          本文标题:HashMap和ConcurrentHashMap

          本文链接:https://www.haomeiwen.com/subject/nwioiqtx.html