具有单独链接的Hashmap

时间:2011-11-23 11:41:56

标签: java data-structures hashmap hashtable

是否有Java Map接口的实现,它使用单独的链接作为冲突解决方案。通过读取HashMap和HashTable的javadoc,我得出的结论是,实现的作用基本上是替换值,并且基本上不使用任何冲突解决方案?

2 个答案:

答案 0 :(得分:4)

你弄错了:它使用每个存储桶的链接列表。

在地图中放置值时,地图首先调用密钥上的hashCode,然后转换此哈希码,使其介于0和桶数之间。如果存储桶为空,则密钥存储在此存储桶中。如果不是,则将此存储桶中的每个密钥与equals的新密钥进行比较。如果一个相等,那么它的值将被新值替换。否则,带有新密钥的新条目将添加到存储桶的条目列表中。

如果要为给定密钥存储多个值,请使用Map<Key, List<Value>>,或使用Guava的MultiMap

答案 1 :(得分:3)

确实有冲突解决方案,但这是因为两个不同的密钥在散列后可能会在同一个桶中结束。

如果您想为单个密钥存储多个值,您可以随时使用HashMap<KeyType, ArrayList<ValueType>>并在必要时进行一些内务处理以初始化阵列。