第一种方法可以认为是Java提供的自动排序的方法,而你需要有独特的排序时就可以用第二种方法,传一个comparator过去,这个comparator正是你要自定义排序的关键点,你可以实现Comparable接口,并且实现compareTo方法,在compareTo里面写你自己需要的排序方法,并且List和Vector、set、map都可以用这种方式实现自定义排序,下面我就举一个map自定义排序的方法,其他的都基本一致
package com.hollycrm.heqf;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class MapSort {
public static void main(String[] args){
Map<String, Player> map = new HashMap<String, Player>();
Player p1 = new Player("John", 1000);
Player p2 = new Player("Ben", 3000);
Player p3 = new Player("Jack", 2000);
map.put("John",p1);
map.put("Ben",p2);
map.put("Jack",p3);
//将Map里面的所以元素取出来先变成一个set,然后将这个set装到一个list里面
List<Map.Entry<String, Player>> list = new ArrayList<Map.Entry<String, Player>>(map.entrySet());
//定义一个comparator
Comparator<Map.Entry<String, Player>> comparator = new Comparator<Map.Entry<String, Player>>(){
@Override
public int compare(Entry<String, Player> p1, Entry<String, Player> p2){
//之所以使用减号,是想要按照分数从高到低来排列
return -(p1.getValue().score - p2.getValue().score);
}
};
Collections.sort(list, comparator);
for(Map.Entry<String, Player> entry:list){
System.out.println(entry.getValue().name + ":" + entry.getValue().score);
}
}
}
package com.hollycrm.heqf;
public class Player {
String name;
int score;
public Player(String name, int score){
this.name = name;
this.score = score;
}
}