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 }

参考博客:http://www.cnblogs.com/skywang12345/p/3324788.html

原文地址:https://www.cnblogs.com/MazeHong/p/6247792.html