0

HashSet(およびHashMap)を使用したいJavaでプログラムを書いています。contains (および containsKey) メソッドを機能させるのに問題があります。これが機能するには、equals メソッドをどこかでオーバーライドする必要があると思います。アイデアは、次のコードを取得して出力を生成することです: true. どうすればそれができるかについて何か考えはありますか?

import java.util.HashSet;
import java.util.Set;

public class Sets {

    public static void main(String args[]){

        Set<StringBuilder> wordSet = new HashSet<StringBuilder>();
        StringBuilder element = new StringBuilder("Element");
        wordSet.add(element);
        StringBuilder element2 = new StringBuilder("Element");
        System.out.println(wordSet.contains(element2));

    }

}
4

3 に答える 3

6

コンテンツの等価性ではなく参照等価性を使用するためStringBuilder、ここでは使用できません。代わりにStringBuilder使用してください。String

StringBuilder(可変であるため、これは理にかなっています。また、2 つStringBuilderの s がある時点では等しくても、後で等しくならない場合もあります。hashCode()orequalsメソッドを作成する問題でStringBuilderはありません。作成したクラスは Java に組み込まれているためです。)

于 2013-02-13T19:45:02.767 に答える
1

StringBuilder はデフォルトの hashCode() および equals() メソッドをオーバーライドしないため、基本的に == チェックを行う Object の実装を使用します。まったく同じ StringBuilder インスタンスを使用していないため、contains() 呼び出しは false を返します。

クラスは final であるため、equals() および hashCode() を追加するように拡張することはできないため、代わりに独自のクラスを作成する必要があります。

于 2013-02-13T19:45:11.417 に答える
1

StringBuilder を使用しないでください。文字列を使用します。

于 2013-02-13T19:45:12.380 に答える