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));
其他的就自己看吧,不难。。。