Méthode add() de Java HashSet

Java HashSet Java HashSet

add()La méthode estHashSetl'une des méthodes les plus couramment utilisées de la classe, et sa fonction est d'ajouter un élément à l'ensemble.

Syntaxe de la méthode

public boolean add(E e)

Description du paramètre

  • E e: l'élément à ajouter à l'ensemble

Valeur de retour

  • Si l'ensemblene contient pasl'élément, l'ajout réussit et renvoietrue
  • Si l'ensemblecontient déjàl'élément, il ne sera pas ajouté et renvoiefalse

Exemple 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
        boolean isAdded1 = fruits.add("Apple");  // renvoie true
        boolean isAdded2 = fruits.add("Banana"); // renvoie true
        boolean isAdded3 = fruits.add("Apple");  // renvoie false car Apple existe déjà
       
        System.out.println(fruits); // Sortie : [Apple, Banana]
        System.out.println("Première fois que l'on ajoute Apple : " + isAdded1);
        System.out.println("Première fois que l'on ajoute Banana : " + isAdded2);
        System.out.println("Deuxième fois que l'on ajoute Apple : " + isAdded3);
    }
}

Principe sous-jacent de la méthode add()

Comprendreadd()le principe de fonctionnement de la méthode nous aide à mieux utiliserHashSet。

Processus d'ajout d'un élément

  1. Calculer la valeur de hachage: calculer d'abord celle de l'élément à ajouterhashCode()
  2. Déterminer l'emplacement de stockage: déterminer l'emplacement de stockage de l'élément dans la table de hachage en fonction de la valeur de hachage
  3. Vérifier s'il existe déjà:
    • Si la position est vide, stocker directement l'élément
    • Si la position n'est pas vide, appelerequals()la méthode pour comparer si les éléments sont identiques
  4. Décider d'ajouter ou non:
    • Si les éléments sont identiques, ne pas ajouter, et renvoyerfalse
    • Si les éléments sont différents (collision de hachage), ils peuvent être stockés à des positions différentes dans le même compartiment

Remarques importantes

  • HashSetDépend de l'élémenthashCode()etequals()methods
  • Si vous souhaitez stocker des objets personnalisés, vous devez correctement redéfinir ces deux méthodes
  • Une implémentation incorrecte peut entraîner un comportement anormal de l'ensemble

Complexité temporelle de la méthode add()

HashSetdeadd()La complexité temporelle de la méthode est **O(1)** dans le cas idéal (aucune collision de hachage). Cela signifie que quel que soit le nombre d'éléments dans l'ensemble, le temps pour ajouter un nouvel élément est à peu près le même.

Cependant, dans un cas extrême (tous les éléments sont hachés vers la même position), la complexité temporelle se dégrade en **O(n)**, car il est nécessaire de parcourir la liste chaînée ou l'arbre rouge-noir pour vérifier si l'élément existe déjà.


Applications pratiques de la méthode add()

Exemple 1 : Déduplication

Exemple

import java.util.HashSet;

public class DeduplicationExample {
    public static void main(String[] args) {
        String[] names = {"Alice", "Bob", "Alice", "Charlie", "Bob"};
       
        HashSet<String> uniqueNames = new HashSet<>();
        for (String name : names) {
            uniqueNames.add(name);
        }
       
        System.out.println(uniqueNames); // Sortie : [Alice, Bob, Charlie]
    }
}

Exemple 2 : Compter les éléments uniques

Exemple

import java.util.HashSet;

public class UniqueCounter {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 2, 4, 1, 5};
       
        HashSet<Integer> uniqueNumbers = new HashSet<>();
        for (int num : numbers) {
            uniqueNumbers.add(num);
        }
       
        System.out.println("Nombre d'éléments uniques : " + uniqueNumbers.size()); // Sortie : 5
    }
}

Questions fréquentes

1. Pourquoi la méthode add() renvoie-t-elle false lors de l'ajout d'un élément en double ?

Parce queHashSetle principe de conception (du HashSet) n'autorise pas les doublons. Lorsque l'on essaie d'ajouter un élément déjà existant, l'ensemble ne change pas, et la méthode renvoiefalsepour indiquer que l'opération add n'a pas réellement eu lieu.

2. Comment déterminer si deux éléments sont « les mêmes » ?

HashSetUtilisez les règles suivantes pour déterminer si deux éléments sont identiques :

  1. Comparez d'abordhashCode()la valeur de retour
  2. Si les valeurs de hachage sont identiques, alors appelezequals()la méthode pour comparer

Seulement lorsque les deux éléments'hashCode()sont égauxet equals()renvoietruealors seulement sont-ils considérés comme le même élément.

3. Peut-on ajouter une valeur null ?

Oui,HashSetil est permis d'ajouternullune valeur, mais elle ne peut être ajoutée qu'une seule fois (car l'ensemble n'autorise pas les doublons).

Exemple

HashSet<String> set = new HashSet<>();
set.add(null);  // retourne true
set.add(null);  // retourne false

Résumé

  • HashSetdeadd()La méthode est utilisée pour ajouter un élément à l'ensemble
  • Si l'élément existe déjà, il ne sera pas ajouté et retournefalse
  • La complexité temporelle de cette méthode est O(1) dans le cas idéal
  • Une utilisation appropriéeHashSetnécessite de comprendrehashCode()etequals()le rôle de la méthode
  • HashSetIl est très adapté aux scénarios qui nécessitent une recherche rapide et une déduplication

En maîtrisantadd()l'utilisation et les principes de la méthode, vous pouvez l'utiliser plus efficacementHashSetpour résoudre divers problèmes de programmation.

Java HashSet Java HashSet

Autres extensions