这个问题看起来很简单,但我已经试了几个小时(不需要实现hashCode比较)让containsKey方法正常工作。为了简化问题,我将发布一个简单的代码示例,我在其中遇到了问题:
public class myPair {
private int a;
private int b;
myPair(int x, int y) {
a=x;
b=y;
}
public boolean equals(Object pair) {
System.out.println("Ola");
return true;
}
int first() { return a; }
int second() { return b; }
public String toString() {
return "X: "+this.a + " Y:"+this.b;
}
}
public class Main {
public static void main(String args[]){
Map<myPair,String> myMap = new LinkedHashMap<myPair, String>();
myMap.put(new myPair(2, 2), "encontrou me");
if(myMap.containsKey(new myPair(2, 2))){
System.out.println(myMap.get(new myPair(2, 2)));
}
System.out.println(myMap.get(new myPair(2,2)));
}
}
这将输出:
null
我已经实现了equals方法......为什么它没有起作用呢?
TreeMap
(但是你的键需要是可比较的)。然而,如果你重写了equals
方法,而没有同时重写hashCode
方法,那么你就违反了API的契约。 - aioobe