简体   繁体   English

Java 覆盖 CompareTo 方法

[英]Java Override CompareTo method

I have Coordinates class and I want to make Coordinates object comparable.我有 Coordinates 类,我想让 Coordinates 对象具有可比性。

public class Coordinates implements Comparable<Coordinates> {

private int row;
private int column;

The idea is to insert Coordinates objects into PriorityQueue and to get them out sorted.这个想法是将 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;
}

This is my attempt but I am not sure what exactly am I expected to return and how to return it.这是我的尝试,但我不确定我究竟期望返回什么以及如何返回它。 I want my smallest coordinates to have highest priority.我希望我最小的坐标具有最高优先级。 And the function I wrote still expects a return value - the commented line我写的函数仍然需要一个返回值 - 注释行

I want 0,5 to have highest priority than 1,5 and 1,0 to have higher priority than 1,3我希望 0,5 的优先级高于 1,5,而 1,0 的优先级高于 1,3

In effect you want a reverse sort.实际上你想要一个反向排序。 However, a priority queue places the lowest values first so natural order make the lowest values to appear first.但是,优先级队列首先放置最低值,因此自然顺序使最低值首先出现。

You want to return <0 for less than and >0 for greater than你想返回 <0 小于和 >0 大于

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

You can simplify this with Integer.compare您可以使用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;
}

Note: if you assume row and column are non-negative you can write注意:如果你假设行和列是非负的,你可以写

@Override
public int compareTo(Coordinates o) {
    int cmp = row - o.row;
    if (cmp == 0)
        cmp = column - o.column;
    return cmp;
}
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;
       }
    }
}

Fix the if-else brach, hope you are getting the return missing syntax error修复 if-else 分支,希望你得到返回缺失的语法错误

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM