【发布时间】:2020-04-01 02:36:07
【问题描述】:
我在很多地方读到,在 Java 中的哈希冲突之后,它在内部使用链表/树,基于哈希冲突的数量。直到这很好,
但是如何使用'key'取回期望值
【问题讨论】:
-
假设你在谈论一个 HashMap,使用它的
get()方法。
标签: java hashmap new-operator data-retrieval hash-collision
我在很多地方读到,在 Java 中的哈希冲突之后,它在内部使用链表/树,基于哈希冲突的数量。直到这很好,
但是如何使用'key'取回期望值
【问题讨论】:
get() 方法。
标签: java hashmap new-operator data-retrieval hash-collision
它只是迭代存储在该存储桶中的链表并使用没有冲突的equals 检查元素。
其运行时间是线性的,但仅与存储在该特定存储桶中的项目数量呈线性关系,因此只要存储桶保持足够平衡就可以。
看看这个插图 (source):
因此实现将确保 get 操作,即使它有冲突,最终返回正确的结果。
请注意,Java 的 HashSet 和 HashMap 不是如图所示的纯哈希表。在达到一定阈值后,他们将在内部切换到red-black tree。
【讨论】:
keyFromUser.equals(keyInMap) 如果是true,它将假定它是正确的密钥。地图/集在内部完成所有这些工作。如果你调用map.get(key),你会得到正确的值。