【发布时间】:2011-08-01 20:40:06
【问题描述】:
我想限制HashMap 的最大大小,以便对我正在实施的各种散列算法进行度量。我查看了HashMap 的重载构造函数之一中的负载因子。
HashMap(int initialCapacity, float loadFactor)
我尝试在构造函数中将 loadFactor 设置为 0.0f(这意味着我不希望 HashMap 的大小永远增长)但 javac 将此无效:
Exception in thread "main" java.lang.IllegalArgumentException: Illegal load factor: 0.0
at java.util.HashMap.<init>(HashMap.java:177)
at hashtables.CustomHash.<init>(Main.java:20)
at hashtables.Main.main(Main.java:70) Java Result: 1
还有其他方法可以限制HashMap 的大小,使其永远不会增长吗?
【问题讨论】:
-
当 Map 已满并且您尝试插入另一个元素时会发生什么?
-
仅供参考,哈希表需要压缩其键空间,因为您无法保留 2^31 * 4 字节的内存空间来保存每个可能键的值。因此,哈希表通常会截断哈希并使用链表进行冲突。 loadFactor 粗略地指示在表开始使用更多哈希位之前链接的最大大小。因此,长度为 0 的链表没有意义:您不能在其中存储任何内容。
-
负载因子表示何时增加数据结构大小。初始大小(i)和负载因子(x)意味着,当我们有 i*x 个元素时,我们会增加大小。如果 x = 0,就像要求 Java 在数据结构有 0 个元素时增加它的大小。