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());
17 s
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 |