Comparable是排序接口。若一个类实现了Comparable接口,就意味着该类支持排序。实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort()或Arrays.sort进行自动排序。
比较此对象与指定对象的顺序,如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数
//实现类的对象之间比较大小,那么这个类就要实现Comparable接口,然后重写compareTo()方法 public class people implements Comparable<people>{ private String name; private int age; private String sex; //省略getter/setter方法、构造器、toString() @Override public int compareTo(people o) { return this.age - o.age; } } public static void main(String[] args) { people p1 = new people("xingze", 21, "男"); people p2 = new people("xingze2", 20, "男"); people p3 = new people("xingze2", 22, "男"); ArrayList<people> list = new ArrayList<people>(); list.add(p1); list.add(p2); list.add(p3); System.out.println("排序前-------------"); for(people a:list){ System.out.println(a); } Collections.sort(list); System.out.println("排序后-------------"); for(people a:list){ System.out.println(a); } }运行结果:
排序前------------- people [name=xingze, age=21, sex=男] people [name=xingze2, age=20, sex=男] people [name=xingze2, age=22, sex=男] 排序后------------- people [name=xingze2, age=20, sex=男] people [name=xingze, age=21, sex=男] people [name=xingze2, age=22, sex=男]需要比较的对象不需要实现任何接口,只需要在排序的时候传入一个比较器即可
Collections.sort(list,new Comparator<people>(){ @Override public int compare(people o1, people o2) { if(o1.age==o2.age&&o1.name==o2.name){ return 0; }else if(o1.age>o2.age){ return 1; }else{ return 0; } } });comparable是需要比较的对象来实现接口。这样对象调用实现的方法来比较。对象的耦合度高(需要改变对象的内部结构,破坏性大)。
comparator相当于一通用的比较工具类接口。需要定制一个比较类去实现它,重写里面的compare方法,方法的参数即是需要比较的对象。对象不用做任何改变。解耦。