ConcurrentHashMap节点转红黑树的疑问

luqing414 2017-10-17 03:18:30
最近在看ConcurrentHashMap实现,很多文章都提到,如果ConcurrentHashMap的某一个Node下的链表的个数超过8个,则转换为红黑树,但是我粗略看了下关于生成红黑树的分析,都是以hash值作为红黑树的节点的值,那我的问题是,同一个Node下的链表的所有元素的hash值不是应该是一样的吗,那都是一样的怎么生成红黑树,红黑树是二叉树的一种,每个节点值要不一样才能区分是放在节点的左边或右边吧,还是说这里生成红黑树是把所有Node下所有链表的值都拿出来了,应该不是这样吧
...全文
699 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
敲得码黛 2019-04-22
  • 打赏
  • 举报
回复
楼上正解:一个链表中的hash不一定相同
qq_24254803 2018-11-05
  • 打赏
  • 举报
回复
为什么同一个node的链表的hash值都相同; 同一个node的链表的hash值不一定相同, 只是它们的 hash%容量 得到的 index 相同。因为 index 相同就要在同一个数组下标里面。然后才使用红黑树进行使用 hash 比大小.建树
  • 打赏
  • 举报
回复
引用 3 楼 luqing414 的回复:
[quote=引用 2 楼 w2556089 的回复:] 你还是得多看看hashmap的原理 同一个节点 是 hashcode % CAPACITY
。。。 这我知道啊,我们说的不是一个问题吧,比如这个currenthashmap有8个node,0,1,2,3,4,5,6,7,那key为5,13,21的都会进入5这个node,以一个链表存储,但是讲concurrenthashmap原理的文章提到在链表数量超过8个,且node数量超过64个的时候,会把这个链表转成红黑树,且红黑树的值是hashcode,不是hashcode % capacity[/quote] 但是讲concurrenthashmap原理的文章提到在链表数量超过8个,且node数量超过64个的时候 后面这个在源代码中没有看到啊
青年卫大师 2017-10-18
  • 打赏
  • 举报
回复
引用 3 楼 luqing414 的回复:
[quote=引用 2 楼 w2556089 的回复:] 你还是得多看看hashmap的原理 同一个节点 是 hashcode % CAPACITY
。。。 这我知道啊,我们说的不是一个问题吧,比如这个currenthashmap有8个node,0,1,2,3,4,5,6,7,那key为5,13,21的都会进入5这个node,以一个链表存储,但是讲concurrenthashmap原理的文章提到在链表数量超过8个,且node数量超过64个的时候,会把这个链表转成红黑树,且红黑树的值是hashcode,不是hashcode % capacity[/quote] 红黑树是一个查找树 他做作用就是查询的时候比链表快
luqing414 2017-10-18
  • 打赏
  • 举报
回复
引用 2 楼 w2556089 的回复:
你还是得多看看hashmap的原理 同一个节点 是 hashcode % CAPACITY
。。。 这我知道啊,我们说的不是一个问题吧,比如这个currenthashmap有8个node,0,1,2,3,4,5,6,7,那key为5,13,21的都会进入5这个node,以一个链表存储,但是讲concurrenthashmap原理的文章提到在链表数量超过8个,且node数量超过64个的时候,会把这个链表转成红黑树,且红黑树的值是hashcode,不是hashcode % capacity
青年卫大师 2017-10-18
  • 打赏
  • 举报
回复
你还是得多看看hashmap的原理 同一个节点 是 hashcode % CAPACITY
luqing414 2017-10-18
  • 打赏
  • 举报
回复
没人知道吗?
luqing414 2017-10-18
  • 打赏
  • 举报
回复
引用 4 楼 w2556089 的回复:
[quote=引用 3 楼 luqing414 的回复:] [quote=引用 2 楼 w2556089 的回复:] 你还是得多看看hashmap的原理 同一个节点 是 hashcode % CAPACITY
。。。 这我知道啊,我们说的不是一个问题吧,比如这个currenthashmap有8个node,0,1,2,3,4,5,6,7,那key为5,13,21的都会进入5这个node,以一个链表存储,但是讲concurrenthashmap原理的文章提到在链表数量超过8个,且node数量超过64个的时候,会把这个链表转成红黑树,且红黑树的值是hashcode,不是hashcode % capacity[/quote] 红黑树是一个查找树 他做作用就是查询的时候比链表快[/quote] 你说的我知道。。。 能回答我问题吗?为什么同一个node的链表的hash值都相同,是怎么生成红黑树的,看到的文章举的例子都是红黑树每个节点的值不相同的

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧