【发布时间】:2020-06-21 05:45:39
【问题描述】:
我在this 页面上看到以下段落:
在 Java 8 之前,HashMap 和 Java 中所有其他基于哈希表的 Map 实现类通过链接来处理冲突,即它们使用链表来存储由于冲突而在同一个桶中结束的映射条目。如果键最终位于已存储条目的相同存储桶位置,则该条目仅添加到那里的链表的头部。在最坏的情况下,这会将 HashMap 的 get() 方法的性能从 O(1) 降低到 O(n)。为了在 HashMap 冲突频繁的情况下解决这个问题,Java8 已经开始使用平衡树而不是链表来存储冲突条目。这也意味着在最坏的情况下,您将获得从 O(n) 到 O(log n) 的性能提升。
这听起来很有趣,但是我猜这个信息的来源是什么?我知道 Oracle 官方教程可以在 here 找到。但我不认为他们走得那么深。即使HashMap api docs 也没有解释相同的内容。您能否向我指出任何官方的 Oracle 文档/教程来解释这个和这样的深入事实?或者这些信息的来源是开源代码?
【问题讨论】:
-
"或者这个信息的来源是开源代码?"确实是
-
如果您好奇,here 是
HashMap的 Java 8 源代码。 -
"即使是 HashMap api 文档也没有解释相同" 那是因为它是一个实现细节。如果你关心实现细节,源代码就是源代码。