2016-08-31 1 views
0

J'ai ajouté quelques objets Chien dans le code mentionné ci-dessous. J'ai implémenté des méthodes égales et des méthodes de hachage. Ensuite, tout en essayant d'obtenir la valeur pour objet Dog Je reçois cette sortieHashMap ne donne pas de résultat attendu

5 
Third 

Sur l'exécution de ce code, la sortie est

5 
null 

Voici le code

import java.util.HashMap; 

public class MapTest { 

    public static void main(String[] args) { 

     HashMap<Dog, String> map = new HashMap<Dog, String>(); 

     Dog d1 = new Dog("Tiger"); 
     Dog d2 = new Dog("Tommy"); 
     Dog d3 = new Dog("Jackie"); 
     Dog d4 = new Dog("Sheru"); 
     Dog d5 = new Dog("Rahul"); 

     map.put(d1, "First"); 
     map.put(d2, "Second"); 
     map.put(d3, "Third"); 
     map.put(d4, "Fourth"); 
     map.put(d5, "Fifth"); 

     System.out.println(map.size()); 
     System.out.println(map.get(new Dog("Jackie"))); 
    } 
} 

class Dog { 

    private String name; 

    public Dog(String name) { 
     this.name = name; 
    } 

    public boolean equals(Object obj) { 
     System.out.println("inside equals"); 
     if ((obj instanceof Dog) && this.name.equals(((Dog) obj).name)) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    public int hashcode() { 
     return this.name.hashCode(); 
    } 
} 
+1

Utilisez le @Override d'annotation pour éviter ce genre de problème faute de frappe https://docs.oracle.com/javase/tutorial/java/annotations/predefined.html –

+1

Always always @Override – GhostCat

Répondre

4

La méthode hashcode() le nom est faux, il devrait être hashCode()

+1

Si vous annotez vos méthodes surchargées avec '@ Override', le compilateur vous aidera à remarquer cette erreur. – Zircon

+0

merci Slimu et Zircon –

0

Votre nom de méthode hashcode() était erroné et le rend hashCode().

Pour plus de détails s'il vous plaît trouver le code

class Dog { 

    private String name; 

    public Dog(String name) { 
     this.name = name; 
    } 

    @Override 
    public boolean equals(Object obj) { 
     System.out.println("inside equals"); 
     if ((obj instanceof Dog) && this.name.equals(((Dog) obj).name)) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    @Override 
    public int hashCode() { 
     return this.name.hashCode(); 
    } 
} 
+0

Merci @NagenSahu. Erreur a déjà été souligné –