关于数据结构:面试知识点学习7hashMap相关问题

82次阅读

共计 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 办法有问题!

正文完
 0