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

来源:互联网 发布:淘宝模特多少钱一天 编辑:程序博客网 时间:2024/06/07 18:01

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;}@Overridepublic 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

0 0