1
モデルクラスのequalsメソッドをオーバーライドして常にfalseを返すとします。 hashCodeは常に定数値を返します。私がオブジェクトを作成してそれを追加すると、HashSet/HashMApが重複を検出する方法を設定しますか?EqualsとHashMap/HashSet
public class Employee {
int id;
String name;
@Override
equals(){
return false;
}
}
public static void main(String[] args) {
HashMap<Employee,String> hk= new HashMap<Employee,String>();
Employee e1 = new Employee();
e1.setId(18);
e1.setName("roohi");
hk.put(e1, "hello");
hk.put(e1, "hello");
}
Equalsメソッドがfalseを返す場合、つまりe1.equals(e1)
がfalseを返す場合。値は2回追加されますが、追加される値は1つだけです。誰でもこれを説明できますか?私はグーグルで、私のコンセプトをHashCodeでクリアして契約と同じだが、ここでは失敗している。あなたが近くに取る場合は、コード
if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
のこのラインを気づけば
これは、すべて同じバケット内の別々のエントリになります。 –