【发布时间】:2013-11-10 14:20:00
【问题描述】:
Java HashMap 使用put 方法在HashMap 中插入K/V 对。
假设我使用了put 方法,现在HashMap<Integer, Integer> 有一个条目,key 为 10,value 为 17。
如果我在这个HashMap 中插入 10,20,由于相同的键 10 发生冲突,它只是用这个条目替换上一个条目。
如果密钥冲突HashMap 用新的 K/V 对替换旧的 K/V 对。
所以我的问题是HashMap 何时使用链式冲突解决技术?
为什么它没有形成一个linkedlist,键为10,值为17,20?
【问题讨论】:
-
嘿,谁对所有这些正确答案投了反对票?毕竟 Map 接口需要这种行为。
-
@Axel:我想这是因为人们误解了 OP。 OP 基本上想知道当多个键被散列到同一个桶时会发生什么。那就是使用碰撞解决方案的时候。关于多地图的所有其他答案都在继续,什么不是......
-
但是 OP 明确给出了将两个元素与相同的键 (10) 放置的示例,并想知道为什么不存储两个不同的值。这是 MultiMap的行为。
-
这个可以通过HashMap.getEntry的源码来确认。很明显,该条目是一个具有相同哈希码的不同键值的列表。