Méthode Java HashSet addAll()
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
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 :
- Si
HashSeta 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 - Si
HashSetn'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
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.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.Autorise les valeurs null:
HashSetPermet d'ajouter des valeurs null, mais une seule valeur null (car il s'agit d'un ensemble).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.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.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
Modification concurrente: Si, pendant l'itération sur la
HashSetvous appelez laaddAll()méthode, elle peut leverConcurrentModificationException。Collection vide: Si la collection passée est null, cela lèvera
NullPointerException。Impact sur les performances: Pour les grandes collections,
addAll()l'opération peut nécessiter plus de temps et de mémoire.É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
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.
Dédoublonnage des données: Convertir rapidement une liste en un ensemble sans éléments en double.
Opérations sur les ensembles: Implémenter l'opération d'union sur les ensembles.
Initialiser un ensemble: Initialiser rapidement un nouvel ensemble à partir de données existantes
HashSet。
Suggestions d'optimisation des performances
- Estimer la capacité: Si vous connaissez le nombre d'éléments à ajouter, vous pouvez, lors de la création
HashSetspécifier la capacité initiale pour réduire les opérations de redimensionnement.
Exemple
Opérations par lots: par rapport à des appels multiples
add(), en utilisantaddAll()pour ajouter plusieurs éléments à la fois est généralement plus efficace.É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