【发布时间】:2017-04-12 06:48:41
【问题描述】:
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)));
}
}
}
输出应该是: 1:真 2:真 3:是的
但它来了 1:真 2:错误 3:错误
有人能解释一下为什么会出现这个输出吗? 如果我采用预定义的数据类型,此代码工作正常 作为地图的关键。 有人可以解释一下为什么会出现这个输出吗? 如果我采用预定义的数据类型,此代码工作正常
作为地图的关键。
【问题讨论】:
-
你尝试调试了吗?
-
您的比较方法总是返回 0 或 -1。这是否符合
Comparable.compare文档中的预期? -
应该返回所有 3 个值 1,0,-1 吗?
-
@Prince 是的,没错。