Comparator
1、java.util.Comparator了接口
一个实现了comparator接口的对象能够对比不同的对象。它不能用于同一个类的不同实例的对比,但是可以用于其他的类的实例做对比。必须实现java.util.Comparator接口。
- java.util.Collections.sort(List, Comparator)
- java.util.Arrays.sort(Object[], Comparator);
1 package java.util; 2 3 public interface Comparator<T> { 4 5 int compare(T o1, T o2); 6 7 boolean equals(Object obj); 8 }
2、实现方法
1 public class EmpSortByName implements Comparator<Employee>{ 2 3 public int compare(Employee o1, Employee o2) {//重写compara方法 4 5 return o1.getName().compareTo(o2.getName());//String类实现comparable接口并重写comparaTo方法 6 7 } 8 9 }
3、特别注意
- Comparable 是排序接口。也就是说,实现Comparable接口的类的对象的List列表(或数组)可以通过实现Comparable接口,调用sort()方法来实现排序
- Comparator 是比较器接口。若需要控制某个次序,而该类本身不支持排序(即没有实现Comparable接口);那么,我们可以建立一个“该类的比较器”来进行排序。这个“比较器”只需要实现Comparator接口即可。
in other words:Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。
- 当name相等的时候,接下来对比age,如果相等继续尝试id
4、实例测试
1 public void listSort(){ //对list降序排序 2 List<Integer> list = new ArrayList<Integer>(); 3 list.add(1); 4 list.add(55); 5 list.add(9); 6 list.add(0); 7 Collections.sort(list, new Comparator<Integer>() { 8 public int compare(Integer o1, Integer o2) { 9 return o2 - o1; 10 } 11 });//使用Collections的sort方法,并且重写compare方法 12 }