"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Explorer HashSet : une plongée dans les collections non ordonnées

Explorer HashSet : une plongée dans les collections non ordonnées

Publié le 2024-11-08
Parcourir:381

Exploring HashSet: A Dive into Unordered Collections

Introduction

La classe HashSet fait partie du Java Collections Framework, fournissant une collection rapide et non ordonnée qui n'autorise pas les éléments en double. Il est construit au-dessus du HashMap, ce qui signifie qu'il hérite des mêmes avantages en matière de complexité temporelle mais se concentre uniquement sur unicité des éléments. Dans cet article, nous explorerons le fonctionnement de HashSet, ce qui le rend unique et pourquoi il est différent des autres collections.


Qu’est-ce qu’un HashSet ?

Un HashSet est :

  • Non ordonné : les éléments n'ont pas de séquence prévisible.
  • Unique : les éléments en double sont ignorés.
  • Soutenu en interne par un HashMap : il utilise un HashMap pour stocker des éléments, en se concentrant uniquement sur les clés tout en supprimant les valeurs.
  • O(1) complexité temporelle moyenne : les opérations telles que l'insertion, la suppression et la recherche sont très efficaces.

1. Initialisation d'un HashSet

// Parameterized constructor with initial capacity
Set setWithInitialCapacity = new HashSet(5);

// Parameterized constructor using a collection
Set setWithCollection = new HashSet(Arrays.asList(4, 4, 3));

// Default constructor with default capacity 16
Set set = new HashSet();

Explication:

  • Constructeur par défaut : Crée un HashSet d'une capacité initiale de 16.
  • Constructeur paramétré : Vous pouvez spécifier la capacité initiale, mais notez que la capacité n'est pas la même que la taille. La taille fait référence au nombre réel d'éléments dans l'ensemble.
  • Utilisation d'une collection : Un HashSet peut être créé à partir d'une collection comme une liste, garantissant que seuls les éléments uniques sont conservés.

2. Ajout d'éléments à un HashSet

set.add(1);
set.add(2);
set.add(1); // Duplicate value is ignored
System.out.println(set); // Output -> [1, 2]

Explication:

  • La méthode add() insère des éléments dans le HashSet.
  • Les éléments en double sont ignorés. Lorsque vous essayez d'ajouter 1 deux fois, seule la première occurrence est conservée.

Clé à retenir

Si vous devez remplacer les valeurs en double au lieu de les ignorer, HashSet ne sera pas le bon choix. En effet, il donne la priorité à unicité des éléments.


3. Vérification de la taille par rapport à la capacité

// Parameterized constructor with initial capacity
Set setWithInitialCapacity = new HashSet(5);
System.out.println(setWithInitialCapacity.size()); // Output -> 0

Même si la capacité de setWithInitialCapacity est de 5, la size est de 0 car la taille reflète le nombre d'éléments présents dans l'ensemble, et non la capacité initiale. Vous pouvez considérer la capacité comme l'espace de stockage interne, qui s'ajuste à mesure que des éléments sont ajoutés.


4. Utilisation de HashSet avec des collections

// Parameterized constructor using a collection
Set setWithCollection = new HashSet(Arrays.asList(4, 4, 3));
System.out.println(setWithCollection); // Output -> [3, 4] or [4, 3]

Explication:

  • Bien que trois éléments aient été fournis dans la liste (4, 4, 3), la valeur en double 4 a été supprimée, ne laissant que deux éléments (3 et 4).
  • L'ordre des éléments est imprévisible car HashSet ne maintient aucune insertion ni aucun ordre naturel.

Si vous devez conserver des éléments triés, envisagez d'utiliser un TreeSet, qui garantit que les éléments sont disposés par ordre croissant.


5. Indexation dans HashSet – Est-ce possible ?

Dans les entretiens, une question courante est de savoir si vous pouvez récupérer un index d'un élément dans un HashSet. La réponse est Non, car HashSet utilise un mécanisme de hachage pour stocker les éléments, et non une structure basée sur un index comme une liste ou un tableau.


Résumé des points clés

  1. Non ordonné et unique : HashSet ne conserve que les éléments uniques, en ignorant les doublons.
  2. Construit sur HashMap : Il utilise les clés d'un HashMap interne pour stocker des éléments.
  3. Opérations rapides : La complexité temporelle moyenne est de O(1) pour l'ajout, la suppression et la vérification d'éléments.
  4. Capacité vs taille : La capacité est l'espace alloué, tandis que la taille est le nombre réel d'éléments.
  5. Pas d'indexation : Vous ne pouvez pas récupérer d'éléments par index en raison du mécanisme de hachage.

Relation avec HashMap

Puisque HashSet est soutenu par un HashMap, il utilise les clés de la carte pour stocker des éléments, tandis que les valeurs ne sont pas pertinentes. C'est pourquoi chaque élément d'un HashSet doit être unique, tout comme les clés d'un HashMap.


Conclusion

HashSet est un outil puissant lorsque vous avez besoin d'une collection rapide et non ordonnée qui évite les doublons. Bien qu'il offre une O(1) complexité temporelle pour la plupart des opérations, il lui manque des fonctionnalités telles que le tri et l'indexation. Pour les développeurs, connaître la relation entre HashSet et HashMap permet de comprendre son fonctionnement interne et de mieux utiliser le cadre des collections.

Dans le prochain article, nous explorerons une question d'entretien courante fréquemment posée lors des entretiens pour tester les connaissances des candidats sur les concepts de collections.


Articles connexes

  • Principes de base de Java

  • Les essentiels de l'entretien de tableau

  • L'essentiel de la mémoire Java

Bon codage !

Déclaration de sortie Cet article est reproduit sur : https://dev.to/arhisaxena26/exploring-hashset-a-dive-into-unordered-collections-4ehb?1 En cas de violation, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3