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