初心者の質問の理解は、JavaのHashSetのメソッドJavaのHashSetの程度
Set<User> s = new HashSet<User>();
User u = new User();
u.setName("name1");
s.add(u);
u.setName("name3");
System.out.println(s.contains(u));
が含まれている誰かが、なぜこのコードの出力はfalseを説明できますか?さらに、このコードはUserのequalsメソッドを呼び出すことさえしません。しかし、HashSetとHashMapのソースによると、それを呼び出す必要があります。 Userのメソッドequalsは、単にユーザーの名前でequalsを呼び出します。メソッドhashCodeユーザーの名前のハッシュコードを返します
(ハッシュ衝突ではなく)2つの項目が実際に等しいことを確認するために、
equals
を呼び出します? –Jon Skeetを引用するには "ハッシュセット内のオブジェクトは不変であるか、ハッシュセット(またはハッシュマップ)で使用された後にそれらを変更しないで規律を守る必要があります。 - http://stackoverflow.com/questions/4718009/mutable-objects-and-hashcode – Qwerky