我有一个Vertex类,它实现了Comparable并覆盖了equals。
public class Vertex implements Comparable<Vertex>{
private final int x;
private final int y;
private final char c;
public Vertex(int x, int y, char c) {
this.x = x;
this.y = y;
this.c=c;
}
public double heuristic(Vertex goal){
double dx = Math.abs(x - goal.x);
double dy = Math.abs(y - goal.y);
return Math.sqrt(Math.pow(dx, 2)+Math.pow(dy, 2));
}
@Override
public String toString() {
return ("(" + x + "," + y + ")"+"["+c+"]");
}
@Override
public int compareTo(Vertex v) {
// TODO Auto-generated method stub
if(this.heuristic(end)<v.heuristic(end)) return -1;
return 1;
}
public boolean equals(Vertex v){
if(this.x==v.x && this.y==v.y) return true;
return false;
}
/*
public boolean equals(Object o){
if(o.getClass().getName()=="Vretex"){
Vertex v=(Vertex)o;
return this.equals(v);
}
return false;
}
*/
}
当我使用PriorityQueue并检查一个对象(不同的对象)是否与PriorityQueue中的等功能相同时,我得到了错误。
还在评论中尝试了一个没有成功。
答案 0 :(得分:1)
你的平等是错的,它应该是
@Override public boolean equals (Object other)...
即。参数必须是Object。你也应该实现hashCode。有关详细信息,请参阅http://java67.blogspot.com.br/2013/04/example-of-overriding-equals-hashcode-compareTo-java-method.html。