Map根據Value排序

541732025發表於2015-04-15
說道Map排序,大家第一時間想到的是,利用現成的TreeMap,它會自動根據Map的Key進行排序。
但是如果要按照Map的Value進行排序呢?api沒有提供現成的實現,只能自己實現了。有以下幾個核心元件。
1,Comparator
要想自定義排序肯定少不了Comparator,在compare方法裡面實現自己的排序邏輯,這裡正是借用了Comparator。

2,Map.Entry
想對Map的Value排序,能抽取出相應資料結構嗎?Map裡面的資料結構其實是一個個的Entry,我們可以利用Map提供的api獲取到整個Map的Entry的集合。

3,Collections.sort(List<Map.Entry>, Comparator<Map.Entry>)
有了Comparator,再將Map.Entry放進List,就可以利用Collections的sort對List裡面的元素進行排序了。

針對Entry實現自己的排序邏輯:

點選(此處)摺疊或開啟

  1. private static class ValueComparator implements Comparator<Map.Entry<String, Integer>> {
  2.         @Override
  3.         public int compare(Entry<String, Integer> entry1, Entry<String, Integer> entry2) {
  4.             return entry2.getValue() - entry1.getValue();
  5.         }
  6.     }

測試:

點選(此處)摺疊或開啟

  1. public static void main(String[] args) {
  2.         Map<String, Integer> map = new HashMap<String, Integer>();
  3.         map.put("a", 2);
  4.         map.put("b", 4);
  5.         map.put("c", 1);
  6.         map.put("d", 5);
  7.         map.put("e", 3);

  8.         List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>();
  9.         list.addAll(map.entrySet());
  10.         Collections.sort(list, new ValueComparator());

  11.         for (Map.Entry<String, Integer> entry : list) {
  12.             System.out.println(entry.getValue());
  13.         }
  14.     }

結果:

點選(此處)摺疊或開啟

  1. 5
  2. 4
  3. 3
  4. 2
  5. 1

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28912557/viewspace-1578145/,如需轉載,請註明出處,否則將追究法律責任。

相關文章