基本类型如int形成的容器如list可以直接用Collections.sort(list)排序,那么容器内的对象排序呢?其实就是两种实现方法,对象实现comparable接口并重写compareTo()方法;另一种是写一个相关联的comparator,将其以Collections.sort(list,comparator)传入参数的形式传入:
以下以一个Person类作为栗子:
package jsoup;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Sort {
public static void main(String[] args){
ArrayList<Person> list = new ArrayList<>();
for(int i =0;i<10; i++)
list.add(new Sort().new Person(i,"name"+i));
Collections.sort(list); //根据Person类内部重写的CompareTo对比,对比的是id
System.out.println(list);
Collections.sort(list, new Sort().new ReverseComparator()); //根据Person相关联的ReverseComparator对比,对比的是name,该比较器实现了逆序排序
System.out.println(list);
}
class Person implements Comparable<Person>{
int id;
String name;
public Person(int id, String name){
this.id = id;
this.name = name;
}
@Override
public int compareTo(Person o) {
return (id<o.id ? -1:(id==o.id ? 0:1));
}
public String toString(){
return "Person " +"id:" +id +" " +"name:" + name;
}
}
class ReverseComparator implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
return (o1.name.compareTo(o2.name)<0? 1:(o1.name.compareTo(o2.name)==0? 0:-1));
}
}
}