程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> map-Java中Map.containsKey的問題

map-Java中Map.containsKey的問題

編輯:編程綜合問答
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方法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved