2017-10-16 4 views
-1

Je suis nouveau dans les collections java alors j'ai essayé de codes en utilisant la carte. je mis ma collection comme cetteJava Collection Map: Comment récupérer un objet pour une carte Utilisation de la fonction containsValue

Map<Integer, Person> people = new HashMap<>();          
    people.put(1, new Person("Arnold", "Maluya", 25)); 
    people.put(2, new Person("Mison", "Drey", 3)); 
    people.put(3, new Person("James", "Valura", 54)); 
    people.put(4, new Person("Mikee", "Sandre", 24)); 

donc mon objectif est que je veux vérifier si les gens contient l'objet comme « nouvelle personne (» Arnold « « Maluya », 25) » donc ce que je l'ai fait est-ce

boolean test = people.containsValue(new Person("Arnold", "Maluya", 25)); 

System.out.println(test); 

qui obtient le résultat "faux". Alors, est-ce que je vais bien, donc si tout est faux, qu'est-ce qui m'a manqué?

+4

Vous devez implémenter la méthode "equals" dans la classe Person. – elysrivero99

+0

Voir https://stackoverflow.com/questions/1990734/hashcode-and-equals –

Répondre

3

Mettre en oeuvre un égal, par exemple:

public class Person { 

private String name; 

private String lastName; 

private String age; 

@Override 
public boolean equals(Object o) { 
    if (this == o) return true; 
    if (o == null || getClass() != o.getClass()) return false; 

    Person person = (Person) o; 

    if (name != null ? !name.equals(person.name) : person.name != null) return false; 
    if (lastName != null ? !lastName.equals(person.lastName) : person.lastName != null) return false; 
    return age != null ? age.equals(person.age) : person.age == null; 
} 

@Override 
public int hashCode() { 
    int result = name != null ? name.hashCode() : 0; 
    result = 31 * result + (lastName != null ? lastName.hashCode() : 0); 
    result = 31 * result + (age != null ? age.hashCode() : 0); 
    return result; 
} 
} 
+0

omg didnt savoir que merci pour l'information monsieur elysrivero99 :) –

+0

Vous êtes les bienvenus Monsieur! – elysrivero99

1

Les méthodes hashCode() et equals() jouent un rôle distinct dans les objets que vous insérez dans les collections Java. Equals() est utilisé dans la plupart des collections pour déterminer si une collection contient un élément donné.

Lorsque vous insérez un objet dans un hastable, vous utilisez une clé. Le code de hachage de cette clé est calculé et utilisé pour déterminer où stocker l'objet en interne. Lorsque vous devez rechercher un objet dans une table de hachage, vous utilisez également une clé. Le code de hachage de cette clé est calculé et utilisé pour déterminer où rechercher l'objet. Lorsque vous utilisez vos objets java personnalisés dans des collections, il est toujours conseillé de surcharger hashCode() & equals() méthodes, pour éviter les comportements étranges.

+0

merci monsieur jaydeep informations très utiles vraiment l'apprécier :) –

0

Le comportement est correct que vous ne surchargez pas la méthode equals de Person classe. Map consultera la méthode equals de l'objet stocké dans celui-ci pour identifier si la requête correspond aux valeurs stockées. Vous devez remplacer la méthode equals dans votre objet et implémenter la logique de manière appropriée pour déterminer si l'objet transmis en tant qu'argument correspond ou non.

Remarque: Le code ci-dessous ne vérifie pas les valeurs nulles et peut donc générer une exception. Vous devez définir des conditions supplémentaires pour éviter les exceptions de pointeur nul.

@Override 
public boolean equals(Object obj) { 
    if (!(obj instanceof Person)) { 
     return false; 
    } 

    Person other = (Person) obj; 

    if ((other.firstName.equals(this.firstName)) && (other.lastName.equals(this.lastName)) 
      && (other.age == this.age)) { 
     return true; 
    } 

    return false; 
}