gpt4 book ai didi

java - 确保每个 Hashmap 桶/槽有一个值

转载 作者:行者123 更新时间:2023-12-01 17:27:07 25 4
gpt4 key购买 nike

有没有办法严格确保每个Hashmap存储桶的条目数而不篡改Java中的object.hashcode()函数?

负载因子是平均值:(条目数)/(存储桶数)。本质上,假设我有一个容量为 1000 的 Hashmap。在这个例子中,假设我使用的负载因子为 1。我要存储在 HashMap 中的 100 个对象的哈希码函数很糟糕,它总是返回每个对象的值相同。当我存储完 100 个对象后,它们都将映射到同一个 HashMap 存储桶,最终得到 LinkedList 性能。负载因子将保持不变,因为 100 个条目/1000 个存储桶 = 0.1 < 1。现在,如果我放置 1 M 个相同对象,会发生什么。 HashMap 永远不会调整大小(无论如何都没有用),因为 LF 永远不会被触发。

我知道这在现实世界中是不常见的情况,但想提高我的理解。 HashMap 有没有办法阻止这种情况,或者至少从结构本身得到一些警告?

最佳答案

HashMap 将始终根据键的哈希码计算要使用的存储桶。如果每个键具有相同的哈希码,则它们都将映射到同一个存储桶。如果不提供更好的 hashCode() 实现,您就无法阻止您所描述的行为。

您可以查看使用开放寻址的 Map 实现(例如 TroveTHashMap)。他们的每个存储桶始终只有一个条目。但性能不会提高,它们只是以不同的方式处理冲突,而且它们也无法解决您的根本问题:错误的哈希码。

关于java - 确保每个 Hashmap 桶/槽有一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14034028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com