0%

排序.md

[TOC]

普通变量排序

利用Collections自带的sort方法排序

Collections.sort(list);

lsit可以是实现Comparable接口的任何类。该方法默认升序排序。

若想实现降序,可用以下语句(Object必须可使用指定比较器相互比较):

1
2
3
4
5
6
Collections.sort(list, new Comparator<String>(){
@Override
public int compare(String arg0, String arg1) {
return arg1.compareTo(arg0);
}
});

map变量排序

按key排序

  • 升序

利用TreeMap key顺序排放的特性实现

1
2
3
4
5
6
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("a", 2);
......
SortedMap<String,Integer> sortedMapByKey = new TreeMap<String,Integer>();
sortedMapByKey.putAll(map);
System.out.println("map after sort by key asc.." + sortedMapByKey);
  • 降序

使用Comparator比较器

1
2
3
4
5
6
7
sortedMapByKey = new TreeMap<String,Integer>(new Comparator<String>() {
@Override
public int compare(String arg0, String arg1) {
return arg1.compareTo(arg0);
}
});
sortedMapByKey.putAll(map);

按value值排序

1
2
3
4
5
6
7
8
9
10
11
12
List<Map.Entry<String, Integer>> mapList =
new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
Collections.sort(mapList,new Comparator<Map.Entry<String, Integer>> (){
@Override
public int compare(Map.Entry<String, Integer> o1,
Map.Entry<String, Integer> o2) {
//根据value升序排序
return o1.getValue() - o2.getValue();
//根据value降序排序
//return o2.getValue() - o1.getValue();
}
});

比较器

Comparable与Comparator的区别

Comparable & Comparator 都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序(int compareTo(T other)),Comparator 是在集合外部实现的排序(int compare(Item A,Item B))。

匿名内部类实现comparator

1
2
3
4
5
6
7
8
9
SortedSet<Item> sortByDesc = new TreeSet<>( new
comparator<Item>(){
public int compare(Item A,Item B){
String descA = A.getDesc();
String descB = B.getDesc();
return descA.compareTo(descB);
}
}
);