2016-05-09 8 views
-2

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

+1

Wir müssen Ihre Employees Equals und Hashcode Implementierungen sehen. –

+0

Können Sie bitte den Code für "Mitarbeiter" teilen? Das Problem liegt wahrscheinlich darin und nicht in dem von Ihnen freigegebenen Code. – Mureinik

+0

Die Signatur der 'equals'-Methode ist immer 'public boolean equals (Object obj)' - versuchen Sie, '@ Override' zu ​​Ihrem hinzuzufügen. – zapl

Antwort

1

Ihre Methode equals hat außer Kraft zu setzen Object.equals (Object obj) wahr sein sollte:

public boolean equals(Employee obj) 

sollte

public boolean equals(Object obj) 

sein
+0

Und Sie könnten erwähnen, dass die Implementierung auch nicht genau richtig ist. – GhostCat

Verwandte Themen