Java 覆盖 CompareTo 方法
Java Override CompareTo method
我有坐标 class 并且我想让坐标对象具有可比性。
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;
}
这是我的尝试,但我不确定我究竟希望 return 什么以及如何 return 它。我希望我的最小坐标具有最高优先级。我写的函数仍然需要一个 return 值——注释行
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 分支,希望您得到 return 缺少语法错误
I want 0,5 to have highest priority than 1,5 and 1,0 to have higher priority than 1,3
实际上您需要反向排序。但是,优先级队列首先放置最低值,因此自然顺序使最低值首先出现。
您想return <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;
}
你可以用 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;
}
注意:如果你假设行和列是 non-negative 你可以写
@Override
public int compareTo(Coordinates o) {
int cmp = row - o.row;
if (cmp == 0)
cmp = column - o.column;
return cmp;
}
我有坐标 class 并且我想让坐标对象具有可比性。
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;
}
这是我的尝试,但我不确定我究竟希望 return 什么以及如何 return 它。我希望我的最小坐标具有最高优先级。我写的函数仍然需要一个 return 值——注释行
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 分支,希望您得到 return 缺少语法错误
I want 0,5 to have highest priority than 1,5 and 1,0 to have higher priority than 1,3
实际上您需要反向排序。但是,优先级队列首先放置最低值,因此自然顺序使最低值首先出现。
您想return <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;
}
你可以用 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;
}
注意:如果你假设行和列是 non-negative 你可以写
@Override
public int compareTo(Coordinates o) {
int cmp = row - o.row;
if (cmp == 0)
cmp = column - o.column;
return cmp;
}