javahashmap

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?


Solution

  • 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(key, value);
                 return true;
            }
        }
    
        ...
    }