爪哇, 2022-08-30 00:39 采纳率: 100%
浏览 18
已结题

为什么a是对的呀不应该满足底层数组长度大于64吗

下面关于哈希表特点描述错误的是?()
A、 在jdk8之后,当链表长度超过阈值(8)时,将链表转换为红黑树
B、同一hash值的元素都存储在一个链表里
C、jdk8后哈希表存储采用数组+链表+红黑树实现
D、 哈希表查询数据的效率较慢
【参考答案】: D
【您的答案】: A

  • 写回答

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);
                    // 冲突的节点达到8if (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个条件

    1. 当冲突节点达到8个
    2. hashmap长度达到64

    因此,单说“在jdk8之后,当链表长度超过阈值(8)时,将链表转换为红黑树”,是不严谨的说法。也可以看出出题人其实并不是很了解hashmap的底层原理,或者说出题人觉得,条件说一半也可以是正确的。没必要太去纠结题目,毕竟题目有时候也会是错误的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月7日
  • 已采纳回答 8月30日
  • 创建了问题 8月30日

悬赏问题

  • ¥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语言编的代码什么意思?