對Map類分別按照Key,Value排序,返回值為List物件
阿新 • • 發佈:2019-01-03
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());
}
}
}
- 按照key對Map進行排序
- 定義一個MapKeySort類,實現Comparator介面
- 在compare函式裡面,對Map.Entry類進行操作
- 按照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));
其他的就自己看吧,不難。。。