问题描述
- Java中Map.containsKey的问题
-
我自己实现了一个类
class Method{
String className,methodName;
Vector parameterTypes;
}
并把Method作为键值,写了一个Map
然后我在遍历输出这个Map的所有Key时候,能够输出我想要的那个对象a的内容,可是我写Map.containsKey(a)的时候,它却返回了false。
我尝试过自己改写Object.equals方法,但还是没用。
改写的equals方法如下:public boolean equals(Object anotherMethod){ if(!(anotherMethod instanceof Method)) return false; Method another = (Method)anotherMethod; if(! this.className.equals(another.className)) return false; if(! this.methodName.equals(another.methodName)) return false; if(this.parameterTypes == null && another.parameterTypes != null) return false; if(this.parameterTypes != null && another.parameterTypes == null) return false; if(this.parameterTypes.size() != another.parameterTypes.size()) return false; for(int i=0; i<this.parameterTypes.size(); i++){ if(!this.parameterTypes.elementAt(i).equals(another.parameterTypes.elementAt(i))) return false; } return true; }
另外,我尝试了如下代码:
methodMap.put(method, methodList.size());//methodList.size()是一个int System.out.println(methodMap.containsKey(method));//输出true System.out.println(methodMap.containsKey(new Method(method)));//输出false System.out.println(method.equals(new Method(method)));//输出true
请问这是什么原因,应该如何解决?
解决方案
解决了,用hashmap的时候应该重写hashCode方法。
时间: 2024-11-03 15:55:51