Méthode Java HashSet retainAll()
Aperçu de la méthode
retainAll()est JavaHashSetune méthode importante de la classe, utilisée pour conserver les éléments de la collection qui sont identiques à ceux de la collection spécifiée. En d'autres termes, elle trouve l'intersection de deux ensembles.
Syntaxe de la méthode
Exemple
Paramètres de méthode
Collection<?> c: la collection contenant les éléments à conserver- Valeur de retour : si
HashSetla collection est modifiée par l'appel, elle renvoietrue, sinon renvoiefalse
Comment ça marche
Fonctionnalité de base
retainAll()La méthode modifie laHashSetcollection de sorte qu'elle ne conserve que les éléments qui sont identiques à ceux de la collection spécifiéec. Tous les éléments qui ne sont pas dans la collection spécifiéecseront supprimés de laHashSetcollection.
Complexité de l'algorithme
La complexité temporelle de cette méthode est généralement O(n), où n est la taille de la collection, car elle doit vérifier si chaque élément de la collection actuelle existe dans la collection spécifiée.
Exemples d'utilisation
Exemple 1 : Utilisation de base
Exemple
public class RetainAllExample {
public static void main(String[] args) {
// Créer le premier HashSet
HashSet<String> set1 = new HashSet<>();
set1.add("Apple");
set1.add("Banana");
set1.add("Orange");
// Créer le deuxième HashSet
HashSet<String> set2 = new HashSet<>();
set2.add("Banane");
set2.add("Grape");
// Conserver les éléments de set1 qui sont identiques à ceux de set2
boolean changed = set1.retainAll(set2);
System.out.println("Est-ce que set1 a été modifié : " + changed); // Sortie : true
System.out.println("set1 après retain : " + set1); // Sortie : [Banana]
}
}
Exemple 2 : Aucun élément commun
Exemple
public class NoCommonElements {
public static void main(String[] args) {
HashSet<Integer> numbers1 = new HashSet<>();
numbers1.add(1);
numbers1.add(2);
numbers1.add(3);
HashSet<Integer> numbers2 = new HashSet<>();
numbers2.add(4);
numbers2.add(5);
boolean changed = numbers1.retainAll(numbers2);
System.out.println("Est-ce que la collection a été modifiée : " + changed); // Sortie : true
System.out.println("numbers1 après retain : " + numbers1); // Sortie : []
}
}
Notes
1. Modification de Set
- Si l'on appelle
retainAll()la collection ne change pas après l'appel (c'est-à-dire qu'elle est déjà l'intersection des deux ensembles), la méthode retournerafalse - Si la collection spécifiée
cest vide, la collection actuelle sera vidée.
2. Modification concurrente
Si vous appelezretainAll()la méthode pendant l'itération sur la collection, elle peut leverConcurrentModificationException. Vous devez terminer l'opération de modification de la collection avant d'itérer.
3. Gestion des valeurs null
- Si la collection actuelle autorise les valeurs null mais que la collection en paramètre ne le fait pas, alors l'appel de
retainAll()supprimera ensuite les valeurs null. - Si la collection de paramètres est null, cela lèvera une exception
NullPointerException
Cas d'utilisation pratiques
1. Filtrage des données
Lorsque vous devez filtrer un sous-ensemble qui répond à des conditions spécifiques à partir d'un grand ensemble de données, vous pouvez utiliserretainAll()la méthode.
2. Contrôle des autorisations
Dans un système d'autorisations, cette méthode peut être utilisée pour trouver l'intersection de toutes les autorisations détenues par un utilisateur et des autorisations requises par un rôle.
3. Analyse des données
En analyse des données, recherchez les éléments communs à deux ensembles de données.
Comparaison avec d'autres méthodes
| Méthode | Fonction | Indique s'il faut modifier la collection d'origine | Signification de la valeur de retour |
|---|---|---|---|
retainAll() |
Conserve les éléments qui sont identiques à la collection spécifiée | Oui | Indique si la collection est modifiée |
removeAll() |
Supprime les éléments identiques à ceux de la collection spécifiée | Oui | Indique si la collection est modifiée |
containsAll() |
Vérifie si elle contient tous les éléments de la collection spécifiée | non | Indique si tous sont contenus |
addAll() |
Ajoute tous les éléments de la collection spécifiée | Oui | Indique si la collection est modifiée |
Suggestions d'optimisation des performances
- Si vous effectuez fréquemment des opérations d'intersection d'ensembles, envisagez d'utiliser une bibliothèque optimisée spécifiquement pour les opérations sur les ensembles.
- Pour les grandes collections, vous pouvez d'abord convertir la plus petite collection en un
HashSetHashSet afin d'améliorer l'efficacité de recherche. - Dans un environnement multithread, utilisez
Collections.synchronizedSet()des collections enveloppées.
Résumé
HashSetderetainAll()La méthode est un puissant outil d'opération sur les collections qui peut implémenter commodément la fonctionnalité d'intersection d'ensembles. Comprendre son principe de fonctionnement et ses caractéristiques peut aider les développeurs à traiter les données de collection plus efficacement. Dans le développement réel, vous devez choisir la méthode d'opération de collection appropriée en fonction des besoins spécifiques, et faire attention à son impact sur les performances et à la sécurité des threads.
Java HashSet