Méthode contains() de Java HashSet

Java HashSet Java HashSet


contains()La méthode est une méthode couramment utilisée en JavaHashSetfournie par la classe HashSet, utilisée pour vérifier si la collection contient l'élément spécifié. Cette méthode renvoie une valeur booléenne indiquant si l'élément existe.

Syntaxe de la méthode

boolean contains(Object o)

Paramètres de méthode

Paramètre Type Description
o Object L'élément à rechercher dans la collection

Valeur de retour

Type de valeur de retour Description
booléen Renvoie true si la collection contient l'élément spécifié ; sinon, renvoie false

Fonctionnement de la méthode

HashSetdecontains()L'implémentation sous-jacente de la méthode repose sur une structure de données de table de hachage :

  1. Tout d'abord, calculez le code de hachage de l'objet passé en argument
  2. Localisez la position correspondante (bucket) dans la table de hachage en fonction du code de hachage
  3. Recherchez dans cette position (bucket) un objet égal (en utilisantequals()la méthode equals() pour la comparaison)

Exemple d'utilisation

Utilisation de base

Exemple

import java.util.HashSet;

public class HashSetExample {
    public static void main(String[] args) {
        // Créer un HashSet
        HashSet<String> fruits = new HashSet<>();
       
        // Ajouter des éléments
        fruits.add("Pomme");
        fruits.add("Banane");
        fruits.add("Orange");
       
        // Vérifie si l'élément existe
        System.out.println("Contient Apple ? " + fruits.contains("Apple"));  // vrai
        System.out.println("Contient Mango ? " + fruits.contains("Mango")); // faux
    }
}

Objets personnalisés

Lorsque vous utilisez des objets personnalisés, vous devez redéfinir correctementhashCode()etequals()les méthodes hashCode() et equals() :

Exemple

import java.util.HashSet;

class Student {
    private int id;
    private String name;
   
    public Student(int id, String name) {
        this.id = id;
        this.name = name;
    }
   
    // Il faut redéfinir les méthodes hashCode et equals
    @Override
    public int hashCode() {
        return id;
    }
   
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return vrai;
        if (obj == null || getClass() != obj.getClass()) return false;
        Student student = (Student) obj;
        return id == student.id;
    }
}

public class CustomObjectExample {
    public static void main(String[] args) {
        HashSet<Student> students = new HashSet<>();
        students.add(new Student(1, "Alice"));
        students.add(new Student(2, "Bob"));
       
        System.out.println("Contains Alice? " +
            students.contains(new Student(1, "Alice")));  // vrai
    }
}

Considérations de performance

HashSetdecontains()La méthode a généralement une complexité temporelle en O(1) car elle est basée sur une table de hachage. Cependant, dans le pire des cas (lorsque tous les éléments ont des collisions de hachage), la complexité temporelle se dégrade en O(n).


7. Remarques

  1. Gestion des valeurs null:HashSetIl autorise un élément null ; vous pouvez utiliser contains()contains(null)pour vérifier sa présence
  2. Égalité des objets: Pour déterminer si un objet est contenu, il s'appuie sur laequals()méthode equals() plutôt que l'opérateur ==
  3. Collision de hachage: Une bonnehashCode()implémentation de hashCode() peut réduire les collisions de hachage et améliorer les performances
  4. Accès concurrent:HashSetNon thread-safe. Dans un environnement multithread, vous devez faire attention aux problèmes de synchronisation.

FAQ

Pourquoi la méthode contains() renvoie-t-elle parfois des résultats incorrects ?

C'est généralement parce que vous n'avez pas correctement redéfinihashCode()etequals()les méthodes hashCode() et equals(). Deux objets logiquement égaux doivent renvoyer le même code de hachage, etequals()la méthode equals() doit renvoyer true.

Quelle est la différence entre la méthode contains() et la méthode containsAll() ?

  • contains(): Vérifie si un seul élément existe
  • containsAll(): Vérifie si tous les éléments de la collection spécifiée sont inclus

Comment puis-je améliorer les performances de la méthode contains() ?

  1. Assurez-vous que les implémentations des méthodeshashCode()hashCode() et equals() de l'objet personnalisé sont bonnes, réduisant les collisions de hachage
  2. Pour les grandes collections, envisagez d'ajuster la capacité initiale et le facteur de charge
  3. Utilisez une structure de données plus adaptée (comme TreeSet) si l'ordre est plus important

Java HashSet Java HashSet

Autres extensions