Difference between HashMap, LinkedHashMap and TreeMap
What is the difference between HashMap
, LinkedHashMap
and TreeMap
in Java?
I don't see any difference in the output as all the three has keySet
and values
. What are Hashtable
s?
Map m1 = new HashMap();
m1.put("map", "HashMap");
m1.put("schildt", "java2");
m1.put("mathew", "Hyden");
m1.put("schildt", "java2s");
print(m1.keySet());
print(m1.values());
SortedMap sm = new TreeMap();
sm.put("map", "TreeMap");
sm.put("schildt", "java2");
sm.put("mathew", "Hyden");
sm.put("schildt", "java2s");
print(sm.keySet());
print(sm.values());
LinkedHashMap lm = new LinkedHashMap();
lm.put("map", "LinkedHashMap");
lm.put("schildt", "java2");
lm.put("mathew", "Hyden");
lm.put("schildt", "java2s");
print(lm.keySet());
print(lm.values());
Solution 1:
I prefer visual presentation:
Property | HashMap | TreeMap | LinkedHashMap |
---|---|---|---|
Iteration Order | no guaranteed order, will remain constant over time | sorted according to the natural ordering | insertion-order |
Get / put / remove / containsKey | O(1) | O(log(n)) | O(1) |
Interfaces | Map | NavigableMap, Map, SortedMap | Map |
Null values/keys | allowed | only values | allowed |
Fail-fast behavior | Fail-fast behavior of an iterator cannot be guaranteed, impossible to make any hard guarantees in the presence of unsynchronized concurrent modification | Fail-fast behavior of an iterator cannot be guaranteed, impossible to make any hard guarantees in the presence of unsynchronized concurrent modification | Fail-fast behavior of an iterator cannot be guaranteed, impossible to make any hard guarantees in the presence of unsynchronized concurrent modification |
Implementation | buckets | Red-Black Tree | double-linked buckets |
Is synchronized | implementation is not synchronized | implementation is not synchronized | implementation is not synchronized |
Solution 2:
All three classes implement the Map
interface and offer mostly the same functionality. The most important difference is the order in which iteration through the entries will happen:
-
HashMap
makes absolutely no guarantees about the iteration order. It can (and will) even change completely when new elements are added. -
TreeMap
will iterate according to the "natural ordering" of the keys according to theircompareTo()
method (or an externally suppliedComparator
). Additionally, it implements theSortedMap
interface, which contains methods that depend on this sort order. -
LinkedHashMap
will iterate in the order in which the entries were put into the map
"Hashtable" is the generic name for hash-based maps. In the context of the Java API,
Hashtable
is an obsolete class from the days of Java 1.1 before the collections framework existed. It should not be used anymore, because its API is cluttered with obsolete methods that duplicate functionality, and its methods are synchronized (which can decrease performance and is generally useless). Use ConcurrentHashMap instead of Hashtable.
Solution 3:
All three represent mapping from unique keys to values, and therefore implement the Map interface.
HashMap is a map based on hashing of the keys. It supports O(1) get/put operations. Keys must have consistent implementations of
hashCode()
andequals()
for this to work.LinkedHashMap is very similar to HashMap, but it adds awareness to the order at which items are added (or accessed), so the iteration order is the same as insertion order (or access order, depending on construction parameters).
TreeMap is a tree based mapping. Its put/get operations take O(log n) time. It requires items to have some comparison mechanism, either with Comparable or Comparator. The iteration order is determined by this mechanism.
Solution 4:
See where each class is in the class hierarchy in the following diagram (bigger one). TreeMap implements SortedMap
and NavigableMap
while HashMap
doesn't.
HashTable
is obsolete and the corresponding ConcurrentHashMap
class should be used.
Solution 5:
HashMap
- It has pair values(keys,values)
- NO duplication key values
- unordered unsorted
- it allows one null key and more than one null values
HashTable
- same as hash map
- it does not allows null keys and null values
LinkedHashMap
- It is ordered version of map implementation
- Based on linked list and hashing data structures
TreeMap
- Ordered and sortered version
- based on hashing data structures