Ense 2021-03-25 12:28 采纳率: 50%
浏览 564
已采纳

关于hashmap在什么时候使用数组,什么时候使用链表/红黑树的问题

问题:

1.java8以后链表长度超过8会转为红黑树,当删除后长度效益8会转为链表。这个我知道,但是hashmap是使用Node[] table来存储node,那么问题就来了,什么情况下元素存储在table中,什么情况下转为链表存储。是不是发生了hash碰撞才会转为链表存储,但是一个hashmap发生hash碰撞的概率小之又小,这样利用率太低了,发生红黑树的转换我感觉几乎不可能存在(应为转为红黑树的前提是发生8次hash碰撞,除非恶意改写hashcode生成函数),那如果没有发生hash冲突,是不是都存储在数组中的?

2.当发生hash碰撞时,元素存储在链表中,通过key  get出来的value按理说会有多个啊,怎么取得出来。

3.hashmap的检索速度是o(1),怎么通过hashcode迅速定位到该node的

可以只回答其中一个问题,我主要是想弄明白第一个问题!

  • 写回答

1条回答 默认 最新

  • 三岁丫 2021-03-25 12:57
    关注

    第一个问题自己看源码吧,很久没看过我也忘了。通过 key 找到 value,算出 hashCode 只是第一步,也就是说要找到对应的 value 是需要多次判断的,如果通过 hashcode 找到 value 的时候,还会去直接比较 key 是否相等。一切的一切都是最好自己去看源码,根据你的疑惑点,找到对应的位置看,其实没有那么难,又不是看所有的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图