Java HashMap何时将TreeSet用作存储桶?

Java HashMap何时将TreeSet用作存储桶?,java,java-8,Java,Java 8,从HashMap文档中,我们可以看到: 请注意,使用具有相同哈希代码的多个键肯定会降低任何哈希表的性能。为了改善影响,当关键点具有可比性时,此类可以使用关键点之间的比较顺序来帮助打破联系 我知道如果键实现了可比较的接口,在许多散列冲突中,bucket可以从List转换为TreeSet 是否可以设置容量,或检查何时转换 它不是一个列表,而是一个链接列表 这不是一棵树,而是一棵完美平衡的红黑树 它没有可比性,但实现了 这并不取决于您是否实现了Comparable,bucked仍然会从LinkedLi

从HashMap文档中,我们可以看到:

请注意,使用具有相同哈希代码的多个键肯定会降低任何哈希表的性能。为了改善影响,当关键点具有可比性时,此类可以使用关键点之间的比较顺序来帮助打破联系

我知道如果键实现了可比较的接口,在许多散列冲突中,bucket可以从List转换为TreeSet

是否可以设置容量,或检查何时转换

它不是一个列表,而是一个链接列表

这不是一棵树,而是一棵完美平衡的红黑树

它没有可比性,但实现了

这并不取决于您是否实现了Comparable,bucked仍然会从LinkedList转换为红黑树。“可比较”只是让判断条目是红色还是黑色更容易一些,即向左移动还是向右移动

当移动到树时,将决定总体上存在多少条记录,以及该特定bucket中存在多少条记录

如果你真的想读的话,还有很多要读的

选择正确的容量对于HashMap来说是非常重要的,因为它不是一个列表,而是一个链接列表

这不是一棵树,而是一棵完美平衡的红黑树

它没有可比性,但实现了

这并不取决于您是否实现了Comparable,bucked仍然会从LinkedList转换为红黑树。“可比较”只是让判断条目是红色还是黑色更容易一些,即向左移动还是向右移动

当移动到树时,将决定总体上存在多少条记录,以及该特定bucket中存在多少条记录

如果你真的想读的话,还有很多要读的


选择正确的容量对于HashMap来说是非常重要的,在openjdk中,当bucket大于static final int treefy_THRESHOLD=8时,要读取的要多得多

使用树而不是列表的箱子计数阈值。将元素添加到至少具有这么多节点的容器时,容器将转换为树。该值必须大于2,且应至少为8,以符合树木移除中关于收缩后转换回普通箱的假设

此外,您还必须超过静态最终整数最小树形图容量=64

存储箱可树化的最小表容量。否则,如果bin中的节点太多,则会调整表的大小。 应至少为4*TreeFiy_阈值,以避免调整大小和树化阈值之间的冲突

资料来源:

对于其他实现可能有所不同。如果不使用反射,则无法修改此选项


此外,它不是一个树集,而是openjdk中的一个

当bucket大于static final int TREEIFY_THRESHOLD=8时,它会这样做

使用树而不是列表的箱子计数阈值。将元素添加到至少具有这么多节点的容器时,容器将转换为树。该值必须大于2,且应至少为8,以符合树木移除中关于收缩后转换回普通箱的假设

此外,您还必须超过静态最终整数最小树形图容量=64

存储箱可树化的最小表容量。否则,如果bin中的节点太多,则会调整表的大小。 应至少为4*TreeFiy_阈值,以避免调整大小和树化阈值之间的冲突

资料来源:

对于其他实现可能有所不同。如果不使用反射,则无法修改此选项


而且它不是一个树集,而是一个

你从哪里得到树集的?另外,你在一句话中说了很多东西,这些都是HashMap的实现说明中的错误->不是真正的TreeSet,而是TreeNodes,它们的行为与我们的TreeSet相似。TreeNode与TreeSet无关你从哪里获得TreeSet?另外,你在一句话中说了很多东西,这些都是HashMap的实现说明中的错误->不是真正的TreeSet,而是TreeNodes,它们的行为与我们的TreeSet相似。TreeNode与TreeSetRong无关。请阅读我的回答中的链接谢谢澄清。错误-阅读我的回答中的链接谢谢澄清。在你的评论中还有很多要读的内容:谢谢你的澄清。我标记为重复,还有很多要在您的评论中阅读的内容:谢谢你的澄清。我也标记为副本