Méthode Java HashSet addAll()

Java HashSet Java HashSet


addAll()est en JavaHashSetune méthode courante fournie par la classe, utilisée pour ajouter tous les éléments d'une collection à l'ensemble actuelHashSet. Cette méthode est héritée de laAbstractCollectionclasse, et est implémentée dansHashSet.

Syntaxe de la méthode

public boolean addAll(Collection<? extends E> c)

Paramètres de méthode

addAll()La méthode accepte un paramètre :

Paramètre Type Description
c Collection<? extends E> à ajouter à l'ensemble actuelHashSetla collection d'éléments dans la

Valeur de retour

addAll()La valeur de retour de la méthode est une valeur booléenne :

  • SiHashSeta changé en raison de l'appel de cette méthode (c'est-à-dire qu'au moins un nouvel élément a été ajouté), puis retournetrue
  • SiHashSetn'a pas changé (c'est-à-dire que la collectionctous les éléments de [collection] existent déjà dans la collection actuelleHashSet), puis retournefalse

Caractéristiques de la méthode

  1. Fonctionnalité de déduplication:HashSetSupprime automatiquement les éléments en double, donc si des éléments de la collection ajoutée existent déjà dans la collection actuelleHashSet, ces éléments en double ne seront pas ajoutés à nouveau.

  2. Nature non ordonnée:HashSetL'ordre des éléments n'est pas garanti ; l'ordre après l'ajout peut différer de la collection d'origine.

  3. Autorise les valeurs null:HashSetPermet d'ajouter des valeurs null, mais une seule valeur null (car il s'agit d'un ensemble).

  4. Considérations de performance:addAll()La complexité temporelle de la méthode est approximativement O(n), où n est le nombre d'éléments à ajouter.


Exemples d'utilisation

Exemple 1 : Utilisation de base

Exemple

import java.util.HashSet;
import java.util.Arrays;

public class HashSetAddAllExample {
    public static void main(String[] args) {
        // Créer le premier HashSet
        HashSet<String> set1 = new HashSet<>();
        set1.add("Apple");
        set1.add("Banana");
       
        // Créer la deuxième collection
        HashSet<String> set2 = new HashSet<>();
        set2.add("Orange");
        set2.add("Grape");
        set2.add("Apple"); // Élément en double
       
        // Utiliser la méthode addAll()
        boolean isChanged = set1.addAll(set2);
       
        System.out.println("L'ensemble a-t-il changé : " + isChanged);
        System.out.println("Ensemble fusionné : " + set1);
    }
}

Résultat de sortie:

集合是否改变: true
合并后的集合: [Apple, Grape, Orange, Banana]

Exemple 2 : Utilisation avec d'autres types de collections

Exemple

import java.util.HashSet;
import java.util.ArrayList;

public class HashSetAddAllExample2 {
    public static void main(String[] args) {
        HashSet<Integer> numberSet = new HashSet<>();
        numberSet.add(1);
        numberSet.add(2);
       
        ArrayList<Integer> numberList = new ArrayList<>();
        numberList.add(3);
        numberList.add(4);
        numberList.add(2); // Élément en double
       
        numberSet.addAll(numberList);
       
        System.out.println("Ensemble fusionné : " + numberSet);
    }
}

Résultat de sortie:

合并后的集合: [1, 2, 3, 4]

Notes

  1. Modification concurrente: Si, pendant l'itération sur laHashSetvous appelez laaddAll()méthode, elle peut leverConcurrentModificationException。

  2. Collection vide: Si la collection passée est null, cela lèveraNullPointerException。

  3. Impact sur les performances: Pour les grandes collections,addAll()l'opération peut nécessiter plus de temps et de mémoire.

  4. Égalité des éléments:HashSetUtiliserequals()ethashCode()méthodes pour déterminer si les éléments sont égaux, en garantissant que les classes personnalisées implémentent correctement ces deux méthodes.


Comparaison avec la méthode add()

Fonctionnalité add() addAll()
Nombre d'éléments ajoutés Élément unique Plusieurs éléments
Valeur de retour Renvoie false si l'élément existe déjà Renvoie true si au moins un nouvel élément est ajouté
Cas d'utilisation Lors de l'ajout d'éléments un par un Lors de l'ajout d'éléments par lots

Scénarios d'application pratiques

  1. Fusion de plusieurs sources de données: Lorsque vous devez collecter des données à partir de plusieurs sources de données et supprimer les doublons.

  2. Dédoublonnage des données: Convertir rapidement une liste en un ensemble sans éléments en double.

  3. Opérations sur les ensembles: Implémenter l'opération d'union sur les ensembles.

  4. Initialiser un ensemble: Initialiser rapidement un nouvel ensemble à partir de données existantesHashSet。


Suggestions d'optimisation des performances

  1. Estimer la capacité: Si vous connaissez le nombre d'éléments à ajouter, vous pouvez, lors de la créationHashSetspécifier la capacité initiale pour réduire les opérations de redimensionnement.

Exemple

HashSet<String> set = new HashSet<>(expectedSize);
  1. Opérations par lots: par rapport à des appels multiplesadd(), en utilisantaddAll()pour ajouter plusieurs éléments à la fois est généralement plus efficace.

  2. Éviter les ajouts en double: si possible, vérifiez d'abord si la collection à ajouter est vide ou présente un chevauchement important avec l'ensemble actuel.


FAQ

Q1 : La méthode addAll() modifie-t-elle la collection d'origine ?

A1 : Non,addAll()la méthode ne modifie que celle qui l'appelle,HashSetet ne modifie pas la collection passée en paramètre.

Q2 : Pourquoi addAll() renvoie-t-il parfois false ?

A2 : Lorsque tous les éléments de la collection à ajouter existent déjà dans l'ensemble actuelHashSet, puisaddAll()elle renverra false, ce qui indique qu'aucun nouvel élément n'a été ajouté.

Q3 : Peut-on ajouter des collections de types différents ?

A3 : Oui, tant que le type d'élément de la collection est compatible avecHashSetle type d'élément de (la même collection ou d'une sous-classe).

Q4 : La méthode addAll() est-elle thread-safe ?

A4: HashSetelle-même n'est pas thread-safe. Si elle est utilisée dans un environnement multithread, une synchronisation externe est nécessaire, ou envisagez d'utiliserConcurrentHashMapouCollections.synchronizedSet()。

Java HashSet Java HashSet

autres extensions