Ich habe Hashset whare i auf Objekte gesetzt werden Laden, und ich möchte bestimmtes Objekt zu finden, in diesem Fall, warum ich den Hash-Code außer Kraft setzen müssen tun, um und gleich Methode, die ich von unten Beispiel lesenWann brauche ich Hashcode und Equals-Methode?
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;
}
}
Sie sagen Ich würde für die folgende Abfrage falsch erhalten, wenn ich den Hashcode und die equals-Methode nicht überschreibe.
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());
Ich habe zu verwechseln, wie dies zu HashCode verwandt ist und ist gleich überprüft nur die enthält (ANYOBJECT) und (ANYOBJECT) in Hashset entfernen.
Kann mir jemand das obige Szenario erklären?
Mögliche Duplikat: https://StackOverflow.com/Questions/2265503/Why-Do-Ineed-to-Override-the-Equals-and-hashcode-methods-in-Java?rq=1 –
Sind Sie Fragen Sie, warum Sie einen von beiden außer Kraft setzen müssen oder warum Sie beide außer Kraft setzen müssen? Wenn letzteres: http://stackoverflow.com/questions/2265503/why-do-i-need-to-override-the-equals-and-hashcode-methods-in-java – yshavit
Wie soll der Container wissen, ob es enthält etwas, wenn es nicht sagen kann, ob zwei Dinge gleich sind oder nicht? Ebenso, wie soll es wissen, ob Dinge gleich sind, wenn Sie es nicht sagen, wie das geht? – azurefrog