限制 Java 中 HashMap 的最大大小

新手上路,请多包涵

我想限制 a 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 的大小,使其永远不会增长吗?

原文由 andandandand 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 707
2 个回答

有时越简单越好。

 public class InstrumentedHashMap<K, V> implements Map<K, V> {

    private Map<K, V> map;

    public InstrumentedHashMap() {
        map = new HashMap<K, V>();
    }

    public boolean put(K key, V value) {
        if (map.size() >= MAX && !map.containsKey(key)) {
             return false;
        } else {
             map.put(key, value);
             return true;
        }
    }

    ...
}

原文由 Mike 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以像这样创建一个新类来限制 HashMap 的大小:

 public class MaxSizeHashMap<K, V> extends LinkedHashMap<K, V> {
    private final int maxSize;

    public MaxSizeHashMap(int maxSize) {
        this.maxSize = maxSize;
    }

    @Override
    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
        return size() > maxSize;
    }
}

原文由 WhiteFang34 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题