为什么我的树状图排序不正确? import java.util.TreeMap; 类点实现了可比较的{ 私有整数x,y; 公共点(整数x,整数y){ 这个.x=x; 这个。y=y; } @凌驾 公共布尔等于(对象arg0){ 点p=(点)arg0; 返回(this.x==p.x&&this.y==p.y); } @凌驾 公共字符串toString(){ 返回“(“+x+”、“+y+”)”; } @凌驾 公共整数比较(点arg0){ if(this.x==arg0.x&&this.y==arg0.y) 返回0; 返回-1; } } 公开课考试{ 静态int行,col; 静态树映射区; 公共静态void main(字符串[]args){ dist=新树映射(); 行=4; col=7; 对于(int i=0;i
而言,您的为什么我的树状图排序不正确? import java.util.TreeMap; 类点实现了可比较的{ 私有整数x,y; 公共点(整数x,整数y){ 这个.x=x; 这个。y=y; } @凌驾 公共布尔等于(对象arg0){ 点p=(点)arg0; 返回(this.x==p.x&&this.y==p.y); } @凌驾 公共字符串toString(){ 返回“(“+x+”、“+y+”)”; } @凌驾 公共整数比较(点arg0){ if(this.x==arg0.x&&this.y==arg0.y) 返回0; 返回-1; } } 公开课考试{ 静态int行,col; 静态树映射区; 公共静态void main(字符串[]args){ dist=新树映射(); 行=4; col=7; 对于(int i=0;i,java,treemap,Java,Treemap,而言,您的compareTo不是传递的反对称。有关更多详细信息,请参阅 import java.util.TreeMap; class Point implements Comparable<Point>{ private int x, y; public Point(int x, int y) { this.x = x; this.y = y; } @Override public boolean equa
compareTo
不是传递的反对称。有关更多详细信息,请参阅
import java.util.TreeMap;
class Point implements Comparable<Point>{
private int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public boolean equals(Object arg0) {
Point p = (Point) arg0;
return (this.x == p.x && this.y == p.y);
}
@Override
public String toString() {
return "("+x+", "+y+")";
}
@Override
public int compareTo(Point arg0) {
if(this.x == arg0.x && this.y == arg0.y)
return 0;
return -1;
}
}
public class Test {
static int row, col;
static TreeMap<Point, Integer> dist;
public static void main(String[] args) {
dist = new TreeMap<>();
row = 4;
col = 7;
for(int i=0; i<row; i++){
for(int j=0; j<col; j++){
Point p = new Point(i, j);
dist.put(p, Integer.MAX_VALUE);
}
if(i >= 1)
System.out.println(i+": "+dist.keySet().contains(new Point(1, 5)));
}
}
}
当
a!=b
时,a.compareTo(b)
返回-1,但b.compareTo(a)
也返回-1。这会导致不正确的排序。正如@RobAu指出的,问题在于您的方法。请注意该方法的文档:
将负整数、零或正整数作为此对象返回
小于、等于或大于指定对象
您需要修改代码以允许在点之间进行适当的比较,也就是说,您必须为点提供一些排序。例如,下面是一个可行的替代实现:
@覆盖
公共整数比较(点arg0){
int ret=Integer.compare(x,arg0.x);
如果(ret==0){
ret=Integer.compare(y,arg0.y);
}
返回ret;
}
你试过调试吗?你的compare方法总是返回0或-1。这是否符合Compariable文档中的期望值。compare
?它应该返回所有3个值1,0,-1吗?@Prince是的,没错。@Prince不必担心——但我认为给用户RobAu
评分会更公平,他的答案是正确的(在我之前)我刚刚添加了引用和代码示例。
@Override
public int compareTo(Point arg0) {
if(this.x == arg0.x && this.y == arg0.y)
return 0;
return -1;
}