質問

私はHashSetに名前を付けるであろう、私が作ったクラスのTestを使用して、私を必要とするプロジェクトに取り組んでいます。

:私はそうのように規定されたHashSetを定義し
HashSet<Test> t = new HashSet<Test>();
t.add(new Test("asdf", 1));
t.add(new Test("hello", 2));
t.add(new Test("hello", 3));

私が使用してみました。

t.contains(new Test("asdf", 1));

が、それはfalseを返します。私はHashSet<Character>を使用する場合しかし、正常に動作するようです。私は以前equals宣言を上書きしようとしたが、それはうまくいきませんでした。私は一人でequalsを残してみましたが、私はまだfalseを得ました。私は私が間違っているのかを知る必要がありますか?

また、私は唯一のTest.equals(オブジェクトo)を変更し、ハッシュ関数を編集しませんでした。それは単純なプロジェクトだとJavaドキュメントは、それがo.equals(これ)を使用すると述べているので、私は私がする必要はないと思っています。

役に立ちましたか?

解決

あなたは、同様のhashCode()メソッドをオーバーロードする必要がある場合があります。

他のヒント

HashSet.add(Object data)HashSet.add(new Test(String, int))に等しくない

HashSet.add(new Test("asdf", 1));を使用してみてください。そしてhashCode()メソッドからオーバーライドを作ります。あなたのコードをコンパイルしていますか?

あなたのコードもコンパイルされません...

HashSetのは、2つの引数を受け取りadd()メソッドを持っていない。

あなたが意味する場合は、

t.add(new Test("asdf", 1));

タグの代わりに
t.add("asdf", 1);
前に述べたように、

、ハッシュコードを確認することと適切に実施されたテストクラスのメソッドに等しい。

内部ハッシュテーブルは、ハッシュコードの衝突がある場合に平等をテストするために)あなたのオブジェクトをハッシュとバケットに、)(オブジェクト#のハッシュコードを使用して、#の等号を(オブジェクトます。あなたはこれらのメソッドは、オブジェクトのインスタンスのID(参照ID)を使用します)(そうでない場合は、デフォルトのオブジェクト#に等しい、文字列の等価性をテストするために、あなたのケースで、あなたのテストクラスは、適切な実装(overrrides)を提供していることを確認する必要があります。このトピックに関するチュートリアルについてはこちらをのを参照してください。ます。

scroll top