共计 441 个字符,预计需要花费 2 分钟才能阅读完成。
7.1 计算 hash 值为什么移位运算?为什么是右移 16 位?
7.2 Hash 值计算为什么应用 & 运算?
7.3 容量为什么要是 2 的幂次方?
以上三个问题都对应于以下链接中的问答 5、6、7
深刻了解 hashcode 和 hash 算法 – 一步之 – 博客园 (cnblogs.com)
7.4 为什么链表长度为 8 才转为红黑树?
首先遍历链表的均匀查找时间复杂度是 O(n),红黑树查找的工夫复杂度管制在 O(log(n)),在 n 较小的状况 O(n) 和 O(log(n)) 差异不大 ,所以 不间接采纳 红黑树的形式。
其次,这在 ConcurrentHashMap 源码中有阐明,大略意思是 如果 hash 值设置的好散布很平均的话,链表个别不会太长 (因为达到容量的 0.75 就扩容了),如果设置转红黑树的链表长度越大转红黑树的概率就越小, 通过大量测试当长度为 8 的时候,链表转红黑树的概率仅为 0.00000006,所以采纳了 8。
同时也阐明一般来说是很少状况会呈现红黑树结构的,如果呈现了个别状况下咱们就要思考是不是咱们设计的对象的 hash 办法有问题!
正文完