Java Comparable接口的使用与自定义实现

Comparable接口

Comparable接口是一个泛型接口。Java类库中:Byte,Short,Integer,Long,Float,Double,Character,BigTnteger,BigDecimal,Calendar,String及Data类都实现了Comparable接口。可以直接调用,对于没有实现的类,可以通过接口implements实现。

CompareTo方法

Java提供Comparable接口为我们解决比较两个对象的问题。
接口中的cpmpareTo方法判断这个象相对于比较对象的顺序,小于返回负整数,等于返回0,大于返回正整数。

默认实现的接口
  System.out.println("a".compareTo("z"));//打印测试
  System.out.println("z".compareTo("a"));//打印测试
  System.out.println(new Integer(10).compareTo(new Integer(20)));//打印测试
  System.out.println(new Integer(20).compareTo(new Integer(10)));//打印测试

这里写图片描述

自定义接口实现

例如:通过面积来比较两个矩形的大小。

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)));//打印测试

这里写图片描述

sort方法

由于Comparaable对象都有compareTo方法,sort方法就可以使用compareTo方法来对数组的对象进行比较和排序。

数组排序使用Arrays.sort()
 String[] animal = {"cat", "dog", "chicken", "pig"};
        Arrays.sort(animal);//数组排序的类
        for (String s : animal) {
            System.out.print(s + " ");
        }
        System.out.println();

这里写图片描述

List排序使用Collections.sort()
ArrayList<String> strings = new ArrayList<>();
strings.add("chicken");
strings.add("cat");
strings.add("dog");
strings.add("pig");
Collections.sort(strings);//list排序的类

for (String s : strings) {
System.out.print(s + " ");
}

这里写图片描述

自定义的Rectangular类排序

由于自定义的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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值