我遵循以下Vertex类,它实现了equals,hashCode和compareTo方法。即使这样,我的HashMap也会返回null。我不知道为什么?
public class Vertex implements Comparable<Vertex> {
int id;
public Vertex(int number) {
id = number;
}
public boolean equals(Object other) {
if (other == null)
return false;
else if (other.getClass() != this.getClass())
return false;
else {
Vertex copy = (Vertex) other;
if (copy.id == this.id)
return true;
else
return false;
}
}
public int hasCode() {
int prime = 31;
int smallPrime = 3;
int hashCode = this.id ^ smallPrime - prime * this.hasCode();
return hashCode;
}
public int compareTo(Vertex other) {
if (this.id < other.id)
return -1;
else if (this.id > other.id)
return 1;
else
return 0;
}
}
答案 0 :(得分:5)
您的方法称为hasCode()
。改为hashCode()
。
我建议您使用IDE自动生成hashCode()
和equals(..)
。这将生成正确的方法(现在你在hashCode()
中有一个递归调用)
答案 1 :(得分:0)
此外,在您的equals()
方法
else if(other.getClass()!=this.getClass())
return false;
可以更改为
else if(!(other instanceof Vertex))
return false;
答案 2 :(得分:0)
根据Integer的功能尝试此操作。注意:@Override
的使用会显示您覆盖了错误的方法。
public class Vertex {
final int id;
public Vertex(int number){
id = number;
}
@Override
public boolean equals(Object other){
if(!(other instanceof Vertex)) return false;
return ((Vertex)other).id == id;
}
@Override
public int hashCode() { return id; }
}