Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to iterate a HashMap using the natural entrySet() order?

My Map contains keys sorted in alphabetical order. When I display it, I'm using entrySet().iterator(), but my results are not in the alphabetical order. How can I get my results in order?

like image 754
Venkat Papana Avatar asked Aug 11 '11 16:08

Venkat Papana


4 Answers

No, your map does not hold elements in alphabetical order. You may have .put(..) then in that order, but the map does not have a defined iteration order.

Others suggest using SortedSet, but you can also use LinkedHashMap. It guarantees iteration order:

This implementation (LinkedHashMap) spares its clients from the unspecified, generally chaotic ordering provided by HashMap (and Hashtable), without incurring the increased cost associated with TreeMap

like image 106
Bozho Avatar answered Sep 22 '22 13:09

Bozho


Use TreeMap:

A Red-Black tree based NavigableMap implementation. The map is sorted according to the natural ordering of its keys, or by a Comparator provided at map creation time, depending on which constructor is used...

like image 45
kan Avatar answered Sep 25 '22 13:09

kan


For anyone finding this question in 2020 and beyond...
Now that we have streams, you can do something like this:

map.entrySet()
  .stream()
  .sorted(Map.Entry.comparingByKey())
  .forEach(System.out::println);
like image 35
davidfrancis Avatar answered Sep 23 '22 13:09

davidfrancis


My Map contains keys sorted in alphabetical order

This is not true.

Use http://download.oracle.com/javase/6/docs/api/java/util/SortedMap.html or sort your keys before iterate

like image 31
lucapette Avatar answered Sep 25 '22 13:09

lucapette