Java使自定义对象可比吗?

时间:2015-07-11 00:34:47

标签: java

我的目标如下。

public class Coords {

    public int x;
    public int z;

    public Coords(int x, int z) {
        this.x = x;
        this.z = z;
    }

}

如何实现Compareable? 我不确定 compareTo 方法应该做什么。

@Override
public int compareTo(Object o) {
    // TODO Auto-generated method stub
    return 0;
}

2 个答案:

答案 0 :(得分:2)

您可以比较x然后比较z(或者,z然后x)。另外,我建议您覆盖toString。像,

public class Coords implements Comparable<Coords> {
    public int x;
    public int z;

    public Coords(int x, int z) {
        this.x = x;
        this.z = z;
    }

    @Override
    public int compareTo(Coords o) {
        if (this.x == o.x) {
            if (this.z == o.z) {
                return 0;
            }
            return this.z < o.z ? -1 : 1;               
        }
        return this.x < o.x ? -1 : 1;
    }

    @Override
    public String toString() {
        return String.format("{%d, %d}", x, z);
    }
}

答案 1 :(得分:0)

以下是compareTo的详细信息:

  

将此对象与指定的订单对象进行比较。返回负整数,零或正整数,因为此对象小于,等于或大于指定对象。

我建议这样的事情:

@Override
public int compareTo(Coords other) {
    return this.x == other.x ? (this.z == other.z ? 0 : this.z - other.z) : this.x - other.x

如果切换它们,可以使z更重要。