Comparable接口是一个泛型接口。Java类库中:Byte,Short,Integer,Long,Float,Double,Character,BigTnteger,BigDecimal,Calendar,String及Data类都实现了Comparable接口。可以直接调用,对于没有实现的类,可以通过接口implements实现。
Java提供Comparable接口为我们解决比较两个对象的问题。 接口中的cpmpareTo方法判断这个象相对于比较对象的顺序,小于返回负整数,等于返回0,大于返回正整数。
例如:通过面积来比较两个矩形的大小。
public class Rectangular implements Comparable<Rectangular> { double length, width; public Rectangular(double length, double width) { this.length = length; this.width = width; } public double getArea() { return length * width; } @Override public int compareTo(Rectangular o) {//重写比较方法 if (getArea() > o.getArea()) {//面积比较 return 1; } else if (getArea() < o.getArea()) { return -1; } else return 0; } } System.out.println(new Rectangular(1,1).compareTo(new Rectangular(2,2))); System.out.println(new Rectangular(3,3).compareTo(new Rectangular(2,2)));//打印测试由于Comparaable对象都有compareTo方法,sort方法就可以使用compareTo方法来对数组的对象进行比较和排序。
由于自定义的Rectangular类也实现了Comparable接口的CompareTo方法,所以也可以适应sort方法。
Rectangular[] rectangulars = {new Rectangular(2, 2), new Rectangular(1, 1), new Rectangular(3, 3)}; Arrays.sort(rectangulars); for (Rectangular s : rectangulars) { System.out.println(s.toString() + " ");//打印排序的结果 } System.out.println(); ArrayList<Rectangular> arrayList = new ArrayList<>(); arrayList.add(new Rectangular(2, 2)); arrayList.add(new Rectangular(1, 1)); arrayList.add(new Rectangular(3, 3)); Collections.sort(arrayList); for (Rectangular s : arrayList) { System.out.println(s.toString() + " ");//打印排序的结果 } }有的时候比较一个对象时,我们要先比较其A属性,如果A相等再比较B。 如有需要请查看我的另一篇博客: http://blog.csdn.net/demonliuhui/article/details/54578777