【发布时间】:2012-12-25 21:14:35
【问题描述】:
有没有办法严格确保每个 Hashmap 桶的条目数,而不会篡改 Java 中的 object.hashcode() 函数?
负载因子是一个平均值:(条目数)/(桶数)。本质上,假设我有一个容量为 1000 的 Hashmap。为了这个示例,假设我使用 1 的负载因子。我将要存储在 HashMap 中的 100 个对象具有错误的哈希码函数,它总是返回每个对象的值相同。当我存储完 100 个对象后,它们都将映射到同一个 HashMap 存储桶,我最终会获得 LinkedList 的性能。负载因子将保持沉默,因为 100 个条目 / 1000 个桶 = 0.1 LF,所以永远不会调整 HashMap 的大小(无论如何都不会使用)。
我知道这在现实世界中并不常见,但我想提高我的理解。 HashMap 有没有办法防止这种情况发生,或者至少从结构本身得到一些警告?
【问题讨论】:
-
IdentityHashMap 能满足您的需求吗?
-
我想你已经回答了你自己的问题 - 这是 hashCode 方法。这就是你在使用 HashMaps 时使用的合约。
标签: java collections map hashmap