Maison > Java > javaDidacticiel > Le guide ultime des ensembles en Java : découvrir tous les secrets de cette humble structure de données

Le guide ultime des ensembles en Java : découvrir tous les secrets de cette humble structure de données

Susan Sarandon
Libérer: 2024-11-21 00:39:16
original
360 Les gens l'ont consulté

The Ultimate Guide to Sets in Java: Uncovering Every Secret of This Humble Data Structure

Hé, passionné de Java ! Que vous soyez un débutant en codage essayant de comprendre pourquoi les ensembles existent, ou un programmeur aguerri se demandant s'il y a plus à apprendre, ce guide est fait pour vous. Nous sommes sur le point d'approfondir tout ce qui concerne Set en Java, de son objectif principal à son fonctionnement complexe. Attachez votre ceinture !


Qu'est-ce qu'un ensemble ?

Tout d’abord : qu’est-ce qu’un ensemble et pourquoi devrions-nous nous en soucier ? À la base, un Set est une collection qui ne peut pas contenir d'éléments en double. En d’autres termes, chaque élément d’un ensemble est aussi unique que votre collection de mèmes personnalisés.

Pourquoi utiliser un ensemble ?

Imaginez que vous soyez chargé de créer une liste d'invités pour une fête. Vous voulez vous assurer que personne ne reçoit une invitation deux fois (car c'est tout simplement embarrassant). Entrez dans l'ensemble . Avec un Set, Java garantit automatiquement que tous les éléments sont distincts. C’est parfait pour les situations où unicité est une exigence.

Caractéristiques d'un ensemble

  • Aucun doublon autorisé : La caractéristique la plus importante d'un ensemble est qu'il jamais n'autorise les éléments en double. Ajouter un élément déjà présent ? Java refuse poliment (contrairement à votre patron avec plus de travail).

  • Non ordonné (généralement) : Les ensembles, contrairement aux listes, ne se soucient pas de l'ordre d'insertion. Ils sont heureux tant que leur caractère unique est maintenu.

  • Gestion des valeurs nulles : Certains ensembles autorisent la valeur nulle comme élément, mais une seule fois.


Types d'ensembles en Java

Maintenant que nous savons ce que fait un Set, voyons quels types de Sets Java propose :

  1. HashSet
    • Objectif : L'ensemble incontournable pour la plupart des cas d'utilisation.
  • Caractéristiques : Adossé à un HashMap, un HashSet est rapide et efficace pour vérifier la présence d'un élément (complexité temporelle O(1) pour la plupart des opérations).

  • Disposition de la mémoire : utilise une table de hachage sous le capot, où les éléments sont stockés en fonction d'une fonction de hachage.

  • Nulls autorisés ? : Oui, mais un seul.

  • Exemple de code :

Set<String> hashSet = new HashSet<>();
hashSet.add("Apple");
hashSet.add("Banana");
hashSet.add("Apple"); // This will be ignored
System.out.println(hashSet); // Output: [Apple, Banana]
Copier après la connexion
Copier après la connexion
Copier après la connexion
  1. LinkedHashSet
    • Objectif : Si vous avez besoin d'un ensemble qui maintient l'ordre d'insertion.
  • Caractéristiques : Un hybride entre un HashSet et une LinkedList.

  • Disposition de la mémoire : utilise une table de hachage et une liste doublement chaînée pour maintenir l'ordre.

  • Exemple de code :

Set<String> hashSet = new HashSet<>();
hashSet.add("Apple");
hashSet.add("Banana");
hashSet.add("Apple"); // This will be ignored
System.out.println(hashSet); // Output: [Apple, Banana]
Copier après la connexion
Copier après la connexion
Copier après la connexion
  1. TreeSet
    • Objectif : Un ensemble qui stocke les éléments dans un ordre trié.
  • Caractéristiques : Implémente NavigableSet, utilise un Arbre rouge-noir pour le stockage.

  • Disposition de la mémoire : Une structure arborescente équilibrée.

  • Exemple de code :

Set<String> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add("Apple");
linkedHashSet.add("Banana");
linkedHashSet.add("Orange");
System.out.println(linkedHashSet); // Output: [Apple, Banana, Orange]
Copier après la connexion
Copier après la connexion

Comment fonctionne un HashSet ?

Levons le capot et jetons un coup d'œil à l'intérieur. Un HashSet utilise une table de hachage pour le stockage, où chaque élément se voit attribuer un compartiment en fonction de son code de hachage. Voici ce qui se passe lorsque vous ajoutez un élément :

  1. Calcul du code de hachage : Java appelle la méthode hashCode() pour obtenir le code de hachage de l'élément.

  2. Détermination du bucket : Le code de hachage est mappé à un bucket (un index de tableau).

  3. Gestion des collisions : Si le bucket est déjà occupé (collision), Java utilise le chaînage (listes chaînées ou arbres équilibrés dans les versions Java plus récentes) pour gérer plusieurs éléments dans le même seau.
    Diagramme de la structure HashSet :

Set<Integer> treeSet = new TreeSet<>();
treeSet.add(42);
treeSet.add(10);
treeSet.add(25);
System.out.println(treeSet); // Output: [10, 25, 42]
Copier après la connexion

Techniques pour travailler avec des ensembles

Travailler avec des ensembles peut être amusant si vous connaissez les bonnes astuces :

  1. Union de Deux Ensembles :
[0] -> [Apple] -> [Banana] 
[1] -> [Grapes]
[2] -> [null]
[3] -> [Orange]
...
Copier après la connexion
  1. Intersection de deux ensembles :
Set<Integer> set1 = new HashSet<>(Arrays.asList(1, 2, 3));
Set<Integer> set2 = new HashSet<>(Arrays.asList(3, 4, 5));
set1.addAll(set2);
System.out.println(set1); // Output: [1, 2, 3, 4, 5]
Copier après la connexion
  1. Différence entre les ensembles :
Set<Integer> set1 = new HashSet<>(Arrays.asList(1, 2, 3));
Set<Integer> set2 = new HashSet<>(Arrays.asList(3, 4, 5));
set1.retainAll(set2);
System.out.println(set1); // Output: [3]
Copier après la connexion

Quand utiliser un ensemble ?

Scénarios courants :

  • Garantir des noms d'utilisateur uniques dans une application.

  • Suivi des pages visitées dans un robot d'exploration Web.

  • Maintenir une collection unique d'éléments (par exemple, des électeurs uniques lors d'une élection).
    Drapeaux rouges à considérer :

  • Si vous avez besoin d'accéder à des éléments par un index, Set n'est pas votre ami. Utilisez plutôt une liste.

  • Si vous avez besoin de doublons (par exemple, compter les occurrences d'éléments), pensez à Liste ou Carte.

Méthodes dans l'interface Set

Voici un aide-mémoire des méthodes les plus couramment utilisées :

  • add(E e) : Ajoute un élément s'il n'est pas déjà présent.

  • remove(Object o) : Supprime l'élément spécifié s'il existe.

  • contains(Object o) : Vérifie si un élément est dans l'ensemble.

  • size() : Renvoie le nombre d'éléments.

  • clear() : Supprime tous les éléments.

  • isEmpty() : Vérifie si l'ensemble est vide.

  • iterator() : Renvoie un itérateur sur les éléments.


Techniques et astuces avancées

  1. Objets personnalisés dans un ensemble : Remplacez toujours equals() et hashCode() pour les objets personnalisés afin de garantir que l'ensemble se comporte comme prévu.
Set<String> hashSet = new HashSet<>();
hashSet.add("Apple");
hashSet.add("Banana");
hashSet.add("Apple"); // This will be ignored
System.out.println(hashSet); // Output: [Apple, Banana]
Copier après la connexion
Copier après la connexion
Copier après la connexion
  1. Ensembles simultanés :
    Utilisez ConcurrentHashMap.newKeySet() ou CopyOnWriteArraySet pour les opérations thread-safe.

  2. Ensembles immuables :
    Utilisez Collections.unmodifiableSet() ou Set.of() pour créer des ensembles en lecture seule.

Set<String> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add("Apple");
linkedHashSet.add("Banana");
linkedHashSet.add("Orange");
System.out.println(linkedHashSet); // Output: [Apple, Banana, Orange]
Copier après la connexion
Copier après la connexion

Considérations relatives aux performances

HashSet est votre meilleur choix pour la plupart des tâches en raison de ses performances O(1) pour l'ajout, la suppression et la vérification d'éléments. TreeSet a un coût plus élevé (O(log n)) mais ajoute l'avantage de l'ordre naturel. LinkedHashSet donne un ordre d'itération prévisible avec une légère surcharge.

Identifier les problèmes adaptés à l'ensemble

Reconnaître les types de problèmes :

  • Contrôles d'unicité (par exemple, trouver des mots uniques dans un document).

  • Définir les opérations (par exemple, trouver des amis communs entre utilisateurs).

  • Recherches rapides sans doublons (par exemple, vérifier la présence d'un élément en temps constant).

Pensées finales

Bien que les ensembles ne soient pas aussi glamour qu'une liste ou aussi énigmatiques qu'une carte, ils jouent un rôle crucial dans la gestion efficace de collections uniques. Ce sont les héros méconnus qui garantissent que vos données restent propres et distinctes, vous épargnant ces satanés doublons qui peuvent conduire à des résultats inattendus. Que vous optimisiez un algorithme, garantissiez l'intégrité des données ou essayiez simplement de choisir une structure qui fonctionne tout simplement , comprendre les ensembles de fond en comble fera de vous un développeur plus fort. Alors allez-y et codez en toute confiance, sachant que vous avez libéré le véritable potentiel du puissant Set !


C'est fini, les amis !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal