1. 程式人生 > >對Map類分別按照Key,Value排序,返回值為List物件

對Map類分別按照Key,Value排序,返回值為List物件

MapSort

對Java中Map進行排序操作
- 原理介紹: 涉及到Comparable介面以及Comparator介面的操作
例子

public class Person{
    String name;
    int age;
}

Comparable介面

comparable
用於在類的內部實現的compareTo函式進行比較兩個物件的;
使用Comparable介面的話,需要在Person類實現Comparable介面,並且實現其compareTo
方法,當對比兩個類的時候直接呼叫compareTo函式即可
- 優點:使用簡單,直接實現方法即可
- 缺點:需要修改類

Comparator介面

使用者在類的外部實現compare函式進行比較物件
使用方法:
1. 定義一個PersonSort類,實現Comparator介面的函式compare函式;
2. 使用Collections.sort(List,Comparator)進行排序

MapSort實現

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

public
class MapSort{ public static <K extends Comparable<K>,V extends Comparable<V>> List<Map.Entry<K, V>> sortByKey(final Map<K,V> map){ List<Map.Entry<K, V>> mapList = new ArrayList<>(); mapList.addAll(map.entrySet()); Collections.sort(mapList,new
MapKeySort<K,V>()); return mapList; } public static <K extends Comparable<K>,V extends Comparable<V>> List<Map.Entry<K, V>> sortByValue(final Map<K,V> map){ List<Map.Entry<K, V>> mapList = new ArrayList<>(); mapList.addAll(map.entrySet()); Collections.sort(mapList,new MapValueSort<K,V>()); return mapList; } private static class MapKeySort<K extends Comparable<K>,V extends Comparable<V>> implements Comparator<Map.Entry<K, V>>{ @Override public int compare(Entry<K, V> o1, Entry<K, V> o2) { // TODO 自動生成的方法存根 return o1.getKey().compareTo(o2.getKey()); } } private static class MapValueSort<K extends Comparable<K>,V extends Comparable<V>> implements Comparator<Map.Entry<K, V>>{ @Override public int compare(Entry<K, V> o1, Entry<K, V> o2) { // TODO 自動生成的方法存根 return o1.getValue().compareTo(o2.getValue()); } } }
  1. 按照key對Map進行排序
    • 定義一個MapKeySort類,實現Comparator介面
    • 在compare函式裡面,對Map.Entry類進行操作
  2. 按照value對Map進行排序
    • 定義一個MapValueSort類,實現Comparator介面
    • 在compare函式裡面,對Map.Entry類進行操作

呼叫案例:

Map<String, Integer> map = new HashMap<>();
        map.put("a", 7);
        map.put("c", 3);
        map.put("z", 2);
        map.put("b", 8);
        map.put("w", 4);
        map.put("z", 1);
        System.out.println(map);
        System.out.println(MapSort.sortByKey(map));
        System.out.println(MapSort.sortByValue(map));

其他的就自己看吧,不難。。。