下面关于哈希表特点描述错误的是?()
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的底层原理,或者说出题人觉得,条件说一半也可以是正确的。没必要太去纠结题目,毕竟题目有时候也会是错误的。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥50 求解vmware的网络模式问题 别拿AI回答
- ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳
- ¥15 springboot 3.0 实现Security 6.x版本集成
- ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
- ¥30 请帮我解决一下下面六个代码
- ¥15 关于资源监视工具的e-care有知道的嘛
- ¥35 MIMO天线稀疏阵列排布问题
- ¥60 用visual studio编写程序,利用间接平差求解水准网
- ¥15 Llama如何调用shell或者Python
- ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?