1

TreeMapインターフェースを使用するJavaプログラムを作成していますが、containsKeyに問題があります。確かにTreeMapにないことがわかっているcontainsKeyを指定しても、trueが返されます。

これの原因は何でしょうか?

よろしくお願いします。

-

編集:テキストファイル内の単語の出現をカウントするプログラムを書いています。単語は解析され、それぞれがクラスの新しいインスタンスになります。これらのクラスでは、単語が異なるオブジェクトであっても、単語を等しいものとして扱う必要があるため、equalsメソッドとhashCodeメソッドがオーバーライドされます。

フィールド「text」は、単語のテキストを含む文字列です。

public boolean equals(Object obj){   
   Word temp = ((Word)obj);  
   return this.text.equals(temp.text);  
}

public int hashCode(){  
   return this.text.hashCode();  
}

public int compareTo (Object x) { 
   Word temp = ((Word)x);

   if(this.text.compareTo(temp.text) < 0){
      return -1;
   }
   else if (this.text.equals(temp.text)){
      return 0;
   }
   else {
      return 1;
   }
} 
4

1 に答える 1

3

私の推測では、実装が正しくないequals(おそらくhashCodeも)キータイプを使用しているか、コンパレータがと一致していませんequals。頭のてっぺんから他の理由を考えることはできません。

問題を示す短いが完全なプログラムを作成できれば、これを確認できます。

于 2009-12-01T20:35:48.517 に答える