私はオブジェクトに設定され保存されますと、私は特定のオブジェクトを見つけたい、この場合には、なぜ私はハッシュコードをオーバーライドする必要がないと私は、彼らが言っている いつhashcodeとequalsメソッドが必要ですか?
例以下public class Emp
{
private int age ;
public Emp(int age)
{
super();
this.age = age;
}
public int hashCode()
{
return age;
}
public boolean equals(Object obj)
{
boolean flag = false;
Emp emp = (Emp)obj;
if(emp.age == age)
flag = true;
return flag;
}
}
から読み取る方法に等しいHashSetののファレを持っています私はhashcodeとequalsメソッドをオーバーライドしないと、私は以下のクエリでfalseになるだろう。
System.out.println("HashSet Size--->>>"+hs.size());
System.out.println("hs.contains(new Emp(25))--->>>"+hs.contains(new Emp(25)));
System.out.println("hs.remove(new Emp(24)--->>>"+hs.remove(new Emp(24));
System.out.println("Now HashSet Size--->>>"+hs.size());
私は、これはハッシュコードに関連する方法を混同し、ちょうど含まれている(ANYOBJECT)をチェック等しく、HashSetの中で(ANYOBJECT)を削除しました。
誰かが私に上記のシナリオを説明できますか?
可能な重複:https://stackoverflow.com/questions/2265503/why-do-i-need-to-override-the-equals-and-hashcode-methods-in-java?rq=1 –
なぜあなたはどちらか一方を無効にする必要があるのか、両方を無効にする必要があるのかを尋ねます。後者の場合:http://stackoverflow.com/questions/2265503/why-do-i-need-to-override-the-equals-and-hashcode-methods-in-java – yshavit
コンテナは、 2つのものが等しいかどうかを判断できない場合は、何かが含まれていますか?同様に、あなたはそれを行う方法を教えていない場合、物事が等しいかどうかを知ることはどうしたらよいでしょうか? – azurefrog