代码之家  ›  专栏  ›  技术社区  ›  ByeBye

HashMap何时将TreeSet用作存储桶[[副本]

  •  1
  • ByeBye  · 技术社区  · 7 年前

    从…起 HashMap 我们可以阅读的文件:

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

    Comparable 接口,对多个哈希冲突,bucket可以从 List TreeSet

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

    2 回复  |  直到 7 年前
        1
  •  4
  •   Eugene    7 年前

    这不是一个好主意 List LinkedList

    这不是一个好主意 TreeSet ,但这是一棵完美平衡的红黑树

    事实并非如此 Comparable 但是

    这不取决于您是否正在实施 链表 一棵红黑的树。

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

    In my other answer 如果你真的想要的话。

    选择正确的容量并不是一件简单的事情,因为对于一个 HashMap here

        2
  •  1
  •   leonardkraemer    7 年前

    在openjdk中,当bucket大于 static final int TREEIFY_THRESHOLD = 8

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

    而且你必须超过 static final int MIN_TREEIFY_CAPACITY = 64

    应至少为4*TreeFiy_阈值,以避免调整大小和树化阈值之间的冲突。

    资料来源: http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/HashMap.java

    此外,它不是一个树集,而是一个 red-black tree