逻辑解释
我们知道Arrays.sort(数组)
,也知道Collections.sort(集合类)
的方式来进行排序,其中还有一个自定义的比较器的方式来进行的排序,下面通过匿名内部类的形式实现了,下面通过实现比较器接口,重写比较方法来实现比较,比较的方法中有两个参数,o1 表示前面的元素,o2 表示后面的元素,当这个方法返回正数表示前者比后者大,返回负数表示前者比后者小,相等即相当,当我们拿 o1 减去 o2 如果是正数,表示前者大,那么进行排序默认从小到大;如果 o1 减去 o2 是正数,我们返回负的这个正数,那么相当于告诉比较器前者比后者小(实际是大),于是按照默认从小到大,大的 o1 就会排到前面,这样就实现了从大到小的逆序了!
实际应用
我们在 leetcode 刷排序的题目或者数组,字符串的题目会遇到这种类型的题目,模式大概是给一个数组,然后对值排序,但是要你输出数组下标,当然除了下面的解法外,还有很多其他思路,这里主要是做一个 map 中对键或者值排序的分享
Map 排序 value 输出 keypublic void function(Map<Integer, Integer> map)
// 新建 map 键值对的 list
List<Map.Entry<Integer,Integer>> list = new ArrayList<Map.Entry<Integer,Integer>>(map.entrySet());
// 从小到大排序
Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
return o1.getValue() - o2.getValue();
}
});
// value 排好序后,输出 key 值
for(Map.Entry<Integer,Integer> mapping : list){
System.out.println(mapping.getKey());
}
}
Map 排序 key 输出 value
public void function(Map<Integer, Integer> map)
// 新建 map 键值对的 list
List<Map.Entry<Integer,Integer>> list = new ArrayList<Map.Entry<Integer,Integer>>(map.entrySet());
// 从小到大排序
Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
return o1.getKey() - o2.getKey();
}
});
// key 排好序后,输出 value 值
for(Map.Entry<Integer,Integer> mapping : list){
System.out.println(mapping.getValue());
}
}