【发布时间】:2016-11-05 08:31:49
【问题描述】:
所以从我在 stackoverflow 和其他网站上读到的内容来看。 Java 使用链表解决哈希冲突。
这将保证在插入、获取和删除的最坏情况下的复杂度为 O(n)。
为什么 Java 不使用自平衡 BST(如 AVL、Red Black 等)来保证最坏情况下插入、获取和删除的 O(log n) 复杂度?
【问题讨论】:
-
惊喜:Java 8 使用平衡树来处理冲突:javarevisited.blogspot.sg/2016/01/…
-
主要原因是
HashMap不要求其元素类型为Comparable。但是新的 Java 8 实现将在运行时检查元素是否可比较,如果是,则使用平衡树。这是相当棘手的(仅仅因为一个元素可以与它自己的类型进行比较并不意味着它可以与 HashMap 中的所有其他键类型进行比较)——这可能是为什么不早点这样做的原因。