在覆盖equals和compareTo之后使用PriorityQueue

时间:2016-05-02 19:21:16

标签: java equals comparable

我有一个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中的等功能相同时,我得到了错误。

还在评论中尝试了一个没有成功。

1 个答案:

答案 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