【发布时间】:2013-01-17 09:56:20
【问题描述】:
HashMap 通常用最新的值替换它的值。但是我读过的一篇文章提到了它,因为如果添加重复值,它会保留一个链表。
Read the "What will happen if two different objects have same hashcode"
但是我没有发现连 ConcurrentHashMap 都没有维护这样一个列表?
哪些集合在列表中维护重复项,如果是,如何使用 get("key") 方法识别相关对象?
【问题讨论】:
-
重复值!= 相同的哈希码
-
您是在问如何为一个键存储多个值,或者如何解决基于哈希的映射中的哈希冲突?
-
是的,这在哈希映射中不受支持吗?
-
在
HashMap中,key元素被分成称为桶的组(例如,最初有 16 个桶)。同一桶中的元素在其哈希码中有一些共同点(简化,但想象一下最后 4 位是相同的)。因此,您可以看到同一个存储桶中可能存在许多键。如果要查找值,则根据 Key 的哈希码选择存储桶,遍历元素。当两个键具有相同的哈希码时,调用equals()来检查完全匹配。如果不匹配,将存储两个不同的条目,否则将覆盖该值。 -
那么那个有多个对象的桶会把它存储为一个链表对吗?
标签: java collections