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

    xiaoxiao2021-04-18  55

    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

    转载请注明原文地址: https://ju.6miu.com/read-674774.html

    最新回复(0)