このexampleは、それが簡単に見える:オブジェクトが既にHashSetに存在するかどうかをチェックする方法?
HashSet<Integer> hSet = new HashSet<Integer>();
hSet.add(new Integer("1"));
hSet.add(new Integer("2"));
hSet.add(new Integer("3"));
System.out.println(hSet.contains(new Integer("3")));
真
しかし、私はムービーオブジェクト(私が確認したい)上でそれを使用する:
Set<Movie> hSet = new HashSet<Movie>();
hSet.add(new Movie(222, "Lord of the Rings", "something"));
System.out.println(hSet);
System.out.println(hSet.contains(new Movie(222, "Lord of the Rings", "something")));
偽
HSETプリントは示しています
[ID:222name:ロードオブザリング]
私は新しい整数を追加したり、新しいムービーオブジェクトを追加することで違いが表示されませんリスト。では、なぜ私の例は機能していないのですか?
//編集。
誰かが良いリファレンスをお探しの場合はthis helped me outです。
'Movie'は' equals() 'と' hashCode() 'を正しく実装していますか? –
この違いの理由は、 'Integer'が' hashCode'と 'equals'をオーバーライドするのに対して、' Movie'はそうではありません。 – dasblinkenlight
Hashing thingy内で正しく動作するため、ムービークラスはhashCode()を実装する必要があります。 equals()を実装することも良いことです。 Integerはこれらの2つのメソッドをオーバーライドしますが、あなたのクラスはそうではありません。 – GhostCat