限制 Java 中哈希映射的最大大小

2022-09-01 01:11:39

我想限制 a 的最大大小,以便在我正在实现的各种哈希算法上获取指标。我查看了其中一个重载构造函数中的加载因子。HashMapHashMap

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


答案 1

您可以创建一个如下所示的新类来限制 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;
    }
}

答案 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;
        }
    }

    ...
}