1.Comparator接口:能对不同类型的对象进行排序(当然排序依据还是基本类型),也不用自己实现排序算法
Interface Comparator<T>
对任意类型集合对象进行整体排序,排序时将此接口的实现传递给Collections.sort方法或者Arrays.sort方法排序。
实现int compare(T o1, T o2);
方法,返回正数,零,负数各代表大于,等于,小于。
2 代码:
public class Test { private final class CompareName implements Comparator<Milan> { boolean is_Ascend; public CompareName(boolean b) { // TODO Auto-generated constructor stub is_Ascend = b; } @Override public int compare(Milan o1, Milan o2) { // TODO Auto-generated method stub if (is_Ascend) return o1.p_Name.compareTo(o2.p_Name); else return o2.p_Name.compareTo(o1.p_Name); } } private final class CompareId implements Comparator<Milan> { boolean is_Ascend; public CompareId(boolean b) { // TODO Auto-generated constructor stub is_Ascend = b; } @Override public int compare(Milan o1, Milan o2) { // TODO Auto-generated method stub int a, b; if (is_Ascend) { a = o1.p_Id; b = o2.p_Id; } else { a = o2.p_Id; b = o1.p_Id; } if (a > b) return 1; else if (a == b) return 0; else return -1; } } public static void main(String[] args) { Test t = new Test(); Milan p1 = new Milan(1, "Dida"); Milan p2 = new Milan(2, "Cafu"); Milan p3 = new Milan(3, "Maldini"); Milan P4 = new Milan(6, "Baresi"); Milan p5 = new Milan(9, "Inzaghi"); Milan P6 = new Milan(10, "Costa"); List<Milan> mList = new ArrayList<Milan>(); mList.add(p1); mList.add(P6); mList.add(P4); mList.add(p2); mList.add(p5); mList.add(p3); System.out.println("初始顺序"); System.out.println("姓名 | 号码"); for (Milan p : mList) { System.out.println(p.p_Name + " | " + p.p_Id); } System.out.println(); System.out.println("对号码降序"); System.out.println("姓名 | 号码"); Collections.sort(mList, t.new CompareId(false)); for (Milan p : mList) { System.out.println(p.p_Name + " | " + p.p_Id); } System.out.println(); System.out.println("对姓名升序"); System.out.println("姓名 | 号码"); Collections.sort(mList, t.new CompareName(true)); for (Milan p : mList) { System.out.println(p.p_Name + " | " + p.p_Id); } } }
运行结果:
初始顺序
姓名 | 号码
Dida | 1
Costa | 10
Baresi | 6
Cafu | 2
Inzaghi | 9
Maldini | 3
对号码降序
姓名 | 号码
Costa | 10
Inzaghi | 9
Baresi | 6
Maldini | 3
Cafu | 2
Dida | 1
对姓名升序
姓名 | 号码
Baresi | 6
Cafu | 2
Costa | 10
Dida | 1
Inzaghi | 9
Maldini | 3
comparator函数的机制是自定义下,若01>02则返回1,