Search code examples
javadictionaryhashmaphashtablelinkedhashmap

java: maps zoo, what to choose


I'm pretty new to the Java World (since I'm writing primary in C/C++). I'm using maps in my apps. Since java.util.Map is abstract I need to instantiate it's implementation. Usually I use HashMap like:

Map<String, MyClass> x = new HashMap<>();

But in java docs I found many other implementations, like TreeMap, LinkedHashMap, HashTable, etc. I want to know if I can continue blindly using of the HashMap or there are any important differences between those Map implementations.

The brief list of points-to-know will be ok. Thanks.


Solution

    • Never bother with Hashtable, it's a relic from Java 1.0;
    • HashMap is the universal default due to O(1) lookup and reliance only on equals and hashCode, guaranteed to be implemented for all Java objects;
    • TreeMap gives you sorted iteration over the map entries (plus a lot more—see NavigableMap), but requires a comparison strategy and has slower insertion and lookup – O(logN) – than HashMap;
    • LinkedHashMap preserves insertion/access order when iterating over the entries.

    SortedMap implementations offer some great features, like headMap and tailMap. NavigableMap implementations offer even more features with terrific performance for operations that assume sorted keys.

    Further out there are java.util.concurrent map implementations, like ConcurrentHashMap, which offer great concurrent performance and atomic get/put operations.