下面关于哈希表特点描述错误的是?()
A、 在jdk8之后,当链表长度超过阈值(8)时,将链表转换为红黑树
B、同一hash值的元素都存储在一个链表里
C、jdk8后哈希表存储采用数组+链表+红黑树实现
D、 哈希表查询数据的效率较慢
【参考答案】: D
【您的答案】: A
为什么a是对的呀不应该满足底层数组长度大于64吗
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
zlebhs 2022-08-30 08:54关注这种问题看下源码就知道了,光靠猜,或者听别人说可能都不是正确的。
// put 中的部分实现 for (int binCount = 0; ; ++binCount) { if ((e = p.next) == null) { p.next = newNode(hash, key, value, null); // 冲突的节点达到8个 if (binCount >= TREEIFY_THRESHOLD - 1) treeifyBin(tab, hash); break; } if (e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k)))) break; p = e; } // treeifyBin部分实现 // 判断map长度,小于64则直接扩容 if (tab == null || (n = tab.length) < MIN_TREEIFY_CAPACITY) resize(); // 将冲突的转为红黑树 else if ((e = tab[index = (n - 1) & hash]) != null) { TreeNode<K,V> hd = null, tl = null; do { TreeNode<K,V> p = replacementTreeNode(e, null); if (tl == null) hd = p; else { p.prev = tl; tl.next = p; } tl = p; } while ((e = e.next) != null); if ((tab[index] = hd) != null) hd.treeify(tab); }综上所述,转红黑树需要满足2个条件
- 当冲突节点达到8个
- hashmap长度达到64
因此,单说“在jdk8之后,当链表长度超过阈值(8)时,将链表转换为红黑树”,是不严谨的说法。也可以看出出题人其实并不是很了解hashmap的底层原理,或者说出题人觉得,条件说一半也可以是正确的。没必要太去纠结题目,毕竟题目有时候也会是错误的。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录