【发布时间】:2016-06-23 15:02:21
【问题描述】:
我最近了解到,在 Java 8 中,哈希映射使用二叉树而不是链表,并且哈希码用作分支因子。我知道在发生高冲突的情况下,查找从 O(log n) 减少到O(n) 通过使用二叉树。我的问题是它真的有什么好处,因为摊销时间复杂度仍然是 O(1),也许如果你通过提供相同的哈希码来强制将所有条目存储在同一个桶中我们可以看到所有键都存在显着的时差,但没有人会这样做。
二叉树也比单链表使用更多的空间,因为它同时存储了左右节点。除了一些虚假的测试用例之外,时间复杂度绝对没有改善,为什么还要增加空间复杂度。
【问题讨论】:
-
这不是辩论。我在引用:我的问题是它真的有什么好处 [...] 也许如果您 [...] 我们可以看到显着的时差,但没有人在他们正常的头脑中会这样做。我>。因此,您是说它旨在处理没有头脑正常的人会做的案件,因此开发人员明确处理了一个愚蠢的案例,因此开发人员是愚蠢的并且您持有真相。我建议改写你的问题。
-
你的问题毫无意义。如果您假设不会发生哈希冲突,那么二叉树确实不会消耗更多空间,因为二叉树只会在存在 哈希冲突时使用。更准确地说,在实现从链表切换到二叉树之前,冲突的数量必须超过一个阈值。
-
@Tunaki 我特别指的是人们故意尝试这种情况以显示优势,如果我认为没有更多的东西,我永远不会问这个问题。
-
@Hoger 很好,我不知道链表也被使用了!
标签: java hashmap java-8 theory