实现自己的compareTo和比较方法

时间:2016-05-29 16:47:37

标签: java comparator comparable

我正在编写我的编程课程给出的一些旧任务。 我应该创建一个带有一些基本函数和许多Comparable和Comparator类的Rectangle类。

这就是我已经拥有的:

public class Rectangle {
    private int length, width;
    public Rectangle(int length, int width) {
        this.length = length;
        this.width = width;
    }
    public int length() {
        return length;
    }
    public int width() {
        return width;
    }
    public int area() {
        return length + width;
    }
    public int perimeter() {
        return 2 * length + 2 * width;
    }
}

public class RectangleComparable extends Rectangle implements Comparable<RectangleComparable> {
    public RectangleComparable(int length, int width) {
        super(length, width);
    }
    @Override
    public int compareTo(RectangleComparable r) {
        if (this.area() < o.area()) return -1;
        else if (this.area > o.area()) return 1;
        else return 0;
    }
}

public class RectangleComparatorArea implements Comparable<RectangleComparable> {
    private int area;
    @Override
    public int compareTo(RectangleComparable r) {
        if (area < r.area()) return -1;
        else if (area > r.area()) return 1;
        else return 0;
    }
}

public class RectangleComparatorPerimeter implements Comparable<RectangleComparable> {
    private int perimeter;
    @Override
    public int compareTo(RectangleComparable r) {
        if (perimeter < r.perimeter()) return -1;
        else if (perimeter > r.perimeter()) return 1;
        else return 0;
    }
}

public class ComparableComparator<T> implements java.util.Comparator<T> {
    public int compare(T o1, T o2) {
        return 0;
    }
}

什么是.compareTo,.equals等方法?就像,当我得到一些

obj1.compareTo(obj2);

当我实现自己的compareTo方法时,如何引用obj1?

ComparableComparator.compare方法也适用于Rectangles和其他Generic类型,但我不知道如何启动它。

1 个答案:

答案 0 :(得分:0)

  1. this。这是对compareTo被调用的对象的引用。

  2. 了解jdk的实施方式是如何运作的:java.util.Comparators$NaturalOrderComparator(这是实施细节,隐藏起来,很难)