Java Override CompareTo方法

时间:2017-02-06 19:21:29

标签: java coordinates priority-queue comparator

我有Coordinates类,我想使Coordinates对象具有可比性。

public class Coordinates implements Comparable<Coordinates> {

private int row;
private int column;

我们的想法是将Coordinates对象插入PriorityQueue并将它们排序。

 @Override
public int compareTo(Coordinates o) {
    if (row < o.row) {
        return row;
    }
    if (row > o.row) {
        return o.row;
    }
    if (row == o.row) {
        if (column < o.column) {
            return column;
        }
        if (column > o.column) {
            return o.column;
        }
    }
//    return 0;
}

这是我的尝试,但我不确定我的预期到底是什么以及如何归还。我希望我的最小坐标具有最高优先级。我写的函数仍然需要一个返回值 - 注释行

2 个答案:

答案 0 :(得分:1)

  

我希望0.5优先级高于1,5和1,0,优先级高于1,3

实际上你需要反向排序。但是,优先级队列首先放置最低值,因此自然顺序使最低值首先出现。

您希望返回&lt; 0表示小于&0;&gt; 0表示大于

  sudo docker run -d -p 8080:80 -v "$PWD:/home/me/public_html/project-folder" httpd

您可以使用@Override public int compareTo(Coordinates o) { if (row < o.row) return -1; if (row > o.row) return +1; if (column < o.column) return -1; if (column > o.column) return +1; return 0; }

简化此操作
Integer.compare

注意:如果您假设行和列是非负的,则可以编写

@Override
public int compareTo(Coordinates o) {
    int cmp = Integer.compare(row, o.row);
    if (cmp == 0)
        cmp = Integer.compare(column, o.column);
    return cmp;
}

答案 1 :(得分:-2)

if (row < o.row) {
    return row;
}
else if (row > o.row) {
    return o.row;
}
else
{
    if(row == o.row)
    {

        if (column < o.column) {
            return column;
        }
        if (column > o.column) {
            return o.column;
       }
    }
}

修复if-else brach,希望你得到返回缺少语法错误