andandandand andandandand - 4 months ago 40
Java Question

Limiting the max size of a HashMap in Java

I want to limit the maximum size of a

HashMap
to take metrics on a variety of hashing algorithms that I'm implementing. I looked at the loadfactor in one of
HashMap
's overloaded constructors.

HashMap(int initialCapacity, float loadFactor)


I tried setting the loadFactor to 0.0f in the constructor (meaning that I don't want the HashMap to grow in size EVER) but
javac
calls this invalid:

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


Is there another way to limit the size of
HashMap
so it doesn't grow ever?

Answer

Sometimes simpler is better.

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(...);
             return true;
        }
    }

    ...
}