I want to add a key,value pair into a hashtable (or any other collection) but have to maintain insertion order. How can I do this?
Like I'll add 1 as key "one" as value, 2 as key and "two" as value.
The output should be ordered as:
1:one
2:two
I want to add a key,value pair into a hashtable (or any other collection) but have to maintain insertion order. How can I do this?
Like I'll add 1 as key "one" as value, 2 as key and "two" as value.
The output should be ordered as:
1:one
2:two
Here are the characteristic differences of some important Map
implementations:
LinkedHashMap
: "with predictable iteration order [...] which is normally the order in which keys were inserted into the map (insertion-order)."HashMap
: "makes no guarantees as to the order of the map"TreeMap
: "is sorted according to the natural ordering of its keys, or by a Comparator
"
SortedMap
So it looks like LinkedHashMap
is what you need in this case.
Here's a snippet to illustrate the differences; it also shows a common way to iterate over all entries of a Map
, and how using an interface to refer to objects allow great flexibility of choice of implementation.
import java.util.*;
public class MapExample {
public static void main(String[] args) {
populateThenDump(new HashMap<String,Integer>());
populateThenDump(new TreeMap<String,Integer>());
populateThenDump(new LinkedHashMap<String,Integer>());
}
static void populateThenDump(Map<String,Integer> map) {
System.out.println(map.getClass().getName());
map.put("Zero", 0);
map.put("One", 1);
map.put("Two", 2);
map.put("Three", 3);
map.put("Four", 4);
for (Map.Entry<String,Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " => " + entry.getValue());
}
}
}
The output of the above snippet is (as seen on ideone.com):
java.util.HashMap // unordered, results may vary
Three => 3
Zero => 0
One => 1
Four => 4
Two => 2
java.util.TreeMap // ordered by String keys lexicographically
Four => 4
One => 1
Three => 3
Two => 2
Zero => 0
java.util.LinkedHashMap // insertion order
Zero => 0
One => 1
Two => 2
Three => 3
Four => 4
Iterator
.