是否有Java Map接口的实现,它使用单独的链接作为冲突解决方案。通过读取HashMap和HashTable的javadoc,我得出的结论是,实现的作用基本上是替换值,并且基本上不使用任何冲突解决方案?
答案 0 :(得分:4)
你弄错了:它使用每个存储桶的链接列表。
在地图中放置值时,地图首先调用密钥上的hashCode
,然后转换此哈希码,使其介于0和桶数之间。如果存储桶为空,则密钥存储在此存储桶中。如果不是,则将此存储桶中的每个密钥与equals
的新密钥进行比较。如果一个相等,那么它的值将被新值替换。否则,带有新密钥的新条目将添加到存储桶的条目列表中。
如果要为给定密钥存储多个值,请使用Map<Key, List<Value>>
,或使用Guava的MultiMap。
答案 1 :(得分:3)
确实有冲突解决方案,但这是因为两个不同的密钥在散列后可能会在同一个桶中结束。
如果您想为单个密钥存储多个值,您可以随时使用HashMap<KeyType, ArrayList<ValueType>>
并在必要时进行一些内务处理以初始化阵列。