Kann jemand mir sagen, was mit meinem Code falsch ist. Ich bin nicht in der Lage, herauszufinden, auch wenn nach dem Link Why do I need to override the equals and hashCode methods in Java?HashMap überschreiben gleich und Hashcode
import com.sun.org.apache.xpath.internal.operations.Equals;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Employee a = new Employee(1, "Ram");
Employee b = new Employee(1, "Ram");
Employee c = a;
System.out.println(b.equals(a));
System.out.println(a.hashCode());
System.out.println(b.hashCode());
HashMap<Employee, String> hm = new HashMap<Employee,String>();
hm.put(a, "one");
System.out.println(hm.containsKey(b));
Iterator<Map.Entry<Employee, String>> itr = hm.entrySet().iterator();
while (itr.hasNext()) {
Map.Entry<Employee,String> ent = itr.next();
System.out.println("key "+ent.getKey() +" value " +ent.getValue());
}
}
}
class Employee {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
Employee(int id, String name) {
this.id = id;
this.name = name;
}
public boolean equals(Employee obj)
{
if(this.id==obj.id)
return true;
else
return false;
}
public int hashCode()
{
int result =1;
return (result*37+(name!=null? name.hashCode():0));
}
}
Ich zwingende equals und hashCode Methode, so dass meine beiden Mitarbeiter Objekte gleich sind. Wenn ich nach b-Objekt in der Karte suche, da b's hashCode derselbe ist wie der von a, dann sucht es nach Gleichheit auf a und b, was wahr ist. kaufen, warum hm.contains (b) in meinem Code false zurückgibt, die
Wir müssen Ihre Employees Equals und Hashcode Implementierungen sehen. –
Können Sie bitte den Code für "Mitarbeiter" teilen? Das Problem liegt wahrscheinlich darin und nicht in dem von Ihnen freigegebenen Code. – Mureinik
Die Signatur der 'equals'-Methode ist immer 'public boolean equals (Object obj)' - versuchen Sie, '@ Override' zu Ihrem hinzuzufügen. – zapl