具有单独链接的哈希图

发布于 2024-12-17 18:12:32 字数 117 浏览 1 评论 0 原文

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

Is there an implementation of the java Map interface which utilizes separate chaining as collision resolution. By reading the javadocs for HashMap and HashTable I came to the conclusion that what the implementation does is basically replace the value and essentially doesn't employ any collision resolution?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

超可爱的懒熊 2024-12-24 18:12:32

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

当将值放入映射中时,映射首先对键调用 hashCode,然后转换此哈希代码,使其介于 0 和存储桶数量之间。如果桶为空,则密钥存储在该桶中。如果不是,则将此存储桶中的每个键与新键进行等于比较。如果一相等,则其值被新值替换。否则,具有新密钥的新条目将添加到存储桶的条目列表中。

如果要为给定键存储多个值,请使用 Map>,或使用 Guava 的 MultiMap

You got it wrong: it uses a linked list of entries for each bucket.

When putting a value in the map, the map starts by calling hashCode on the key, then transforms this hash code so that it's between 0 and the number of buckets. If the bucket is empty, the key is stored in this bucket. If it's not, then every key in this bucket is compared to the new key with equals. If one is equal, then its value is replaced by the new value. Else, a new entry with the new key is added to the bucket's list of entries.

If you want to store multiple values for a given key, then use a Map<Key, List<Value>>, or use Guava's MultiMap.

后eg是否自 2024-12-24 18:12:32

它确实具有冲突解决方案,但这是因为两个不同的密钥在散列后可能最终出现在同一个存储桶中。

如果您想为单个键存储多个值,则始终可以使用 HashMap> 并在必要时进行一些内务处理以初始化数组。

It does have collision resolution, but that's because two different keys could plausibly end up in the same bucket after hashing.

If you want to store more than one value for a single key, you can always use HashMap<KeyType, ArrayList<ValueType>> and do some housekeeping to initialize the array when necessary.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文