Java 集合 HashMap排序

来源:这里教程网 时间:2026-02-17 20:13:31 作者:

我们知道HashMap默认不保留任何顺序。如果有需要,我们需要根据需求明确排序。在本教程中,我们将学习如何对TreeMap使用Comparator按键和按值进行排序。

HashMap按键排序

在这个例子中,我们使用TreeMap集合类基于键对HashMap进行排序。

package beginnersbook.com;import java.util.HashMap;import java.util.Map;import java.util.TreeMap;import java.util.Set;import java.util.Iterator;public class Details {    public static void main(String[] args) {         HashMap<Integer, String> hmap = new HashMap<Integer, String>();         hmap.put(5, "A");         hmap.put(11, "C");         hmap.put(4, "Z");         hmap.put(77, "Y");         hmap.put(9, "P");         hmap.put(66, "Q");         hmap.put(0, "R");         System.out.println("Before Sorting:");         Set set = hmap.entrySet();         Iterator iterator = set.iterator();         while(iterator.hasNext()) {               Map.Entry me = (Map.Entry)iterator.next();               System.out.print(me.getKey() + ": ");               System.out.println(me.getValue());         }         Map<Integer, String> map = new TreeMap<Integer, String>(hmap);          System.out.println("After Sorting:");         Set set2 = map.entrySet();         Iterator iterator2 = set2.iterator();         while(iterator2.hasNext()) {              Map.Entry me2 = (Map.Entry)iterator2.next();              System.out.print(me2.getKey() + ": ");              System.out.println(me2.getValue());         }    }}

输出:

Before Sorting:0: R4: Z5: A66: Q9: P77: Y11: CAfter Sorting:0: R4: Z5: A9: P11: C66: Q77: Y

HashMap按值排序

在这个例子中,我们使用Comparator按值对HashMap进行排序。

package beginnersbook.com;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedHashMap;import java.util.LinkedList;import java.util.List;import java.util.Map;import java.util.Set;public class HMapSortingByvalues {  public static void main(String[] args) {      HashMap<Integer, String> hmap = new HashMap<Integer, String>();      hmap.put(5, "A");      hmap.put(11, "C");      hmap.put(4, "Z");      hmap.put(77, "Y");      hmap.put(9, "P");      hmap.put(66, "Q");      hmap.put(0, "R");      System.out.println("Before Sorting:");      Set set = hmap.entrySet();      Iterator iterator = set.iterator();      while(iterator.hasNext()) {           Map.Entry me = (Map.Entry)iterator.next();           System.out.print(me.getKey() + ": ");           System.out.println(me.getValue());      }      Map<Integer, String> map = sortByValues(hmap);       System.out.println("After Sorting:");      Set set2 = map.entrySet();      Iterator iterator2 = set2.iterator();      while(iterator2.hasNext()) {           Map.Entry me2 = (Map.Entry)iterator2.next();           System.out.print(me2.getKey() + ": ");           System.out.println(me2.getValue());      }  }  private static HashMap sortByValues(HashMap map) {        List list = new LinkedList(map.entrySet());       // Defined Custom Comparator here       Collections.sort(list, new Comparator() {            public int compare(Object o1, Object o2) {               return ((Comparable) ((Map.Entry) (o1)).getValue())                  .compareTo(((Map.Entry) (o2)).getValue());            }       });       // Here I am copying the sorted list in HashMap       // using LinkedHashMap to preserve the insertion order       HashMap sortedHashMap = new LinkedHashMap();       for (Iterator it = list.iterator(); it.hasNext();) {              Map.Entry entry = (Map.Entry) it.next();              sortedHashMap.put(entry.getKey(), entry.getValue());       }        return sortedHashMap;  }}

输出:

Before Sorting:0: R4: Z5: A66: Q9: P77: Y11: CAfter Sorting:5: A11: C9: P66: Q0: R77: Y4: Z

相关推荐