1. Conteneurs et collectes
Les conteneurs ou collections sont des classes qui vous permettent de stocker et de traiter plusieurs objets à la fois. Vous connaissez déjà deux types de conteneurs : les tableaux et les listes.
Java possède plusieurs dizaines de collections, chacune stockant des éléments à sa manière. En voici quelques-uns :
Collection | Classe | Description |
---|---|---|
|
|
Liste |
|
Liste liée | |
|
Vecteur | |
|
Empiler | |
|
|
Ensemble |
|
||
|
||
|
|
File d'attente |
|
||
|
|
Carte/Dictionnaire |
|
||
|
Les noms sont quelque peu ambigus ici. Dans la plupart des langages de programmation, toutes ces structures de données sont appelées collections, mais pas en Java. En Java, certaines de ces classes implémentent l' Collection
interface, d'autres non.
Ainsi, les collections sont divisées en collections au sens large et en collections au sens étroit (uniquement celles qui implémentent l' Collection
interface).
Ainsi, pour éviter toute confusion, lorsque nous parlons de collections , nous entendons au sens étroit du terme, c'est-à-dire des classes qui implémentent l' Collection
interface. Les types List
, Set
et Queue
sont tous des collections. Les collections au sens large sont généralement appelées conteneurs . Ceux-ci incluent des types comme Map
et des tableaux.
2. HashSet
collecte
La HashSet
classe est une collection d'ensembles typique. À bien des égards, il est similaire à la ArrayList
classe. À certains égards, c'est une version plus primitive.
Vous pouvez créer un HashSet
objet à l'aide d'une instruction telle que :
HashSet<Type> name = new HashSet<Type>();
Où Type
est le type des éléments que nous stockerons dans la HashSet
collection.
La HashSet
classe a des méthodes comme celle-ci :
Méthode | Description |
---|---|
|
Ajoute l' value élément à la collection |
|
Supprime l' value élément de la collection. Renvoie true s'il y avait un tel élément |
|
Vérifie si la collection a un value élément |
|
Efface la collection en supprimant tous les éléments |
|
Renvoie le nombre d'éléments de la collection |
Voici un exemple d'utilisation d'un ensemble.
Écrivons un programme qui dit au revoir à l'utilisateur s'il dit bonjour. Pour le rendre plus intéressant, nous donnerons à notre programme la possibilité de comprendre "bonjour" en plusieurs langues.
Code | Note |
---|---|
|
Créez un HashSet objet qui stocke String des éléments. Nous ajoutons des salutations dans différentes langues à la set variable. Lire une ligne de la console. Si la chaîne est dans notre ensemble de salutations, alors nous disons au revoir. |
3. Définir
La Set
collection est conçue pour contenir un ensemble d'éléments. C'est pourquoi on l'appelle un Set
(ensemble). Cette collection a trois caractéristiques.
Opérations sur un ensemble
Il n'y a que trois choses que vous pouvez faire avec un ensemble : ajouter des éléments à l'ensemble, supprimer des éléments de l'ensemble et vérifier si l'ensemble contient un élément spécifique. C'est ça.
Pas de commande
Les éléments de cette collection n'ont pas d'index. Vous ne pouvez pas obtenir un élément par un index ou écrire une valeur dans une collection à un index spécifique. Un ensemble n'a pas de méthodes get()
et set()
.
Éléments uniques
Tous les éléments d'un ensemble sont uniques. Contrairement à une liste, un ensemble ne peut contenir qu'une seule instance d'un élément. Un objet est dans l'ensemble ou non — il n'y a pas de troisième option. Vous ne pouvez pas ajouter trois fois du noir à un ensemble de couleurs. C'est là ou ça n'est pas.
Trouver des éléments
Lorsque vous ajoutez un nouvel élément, supprimez un élément ou vérifiez si un élément existe dans un ensemble, une recherche de l'élément est effectuée dans la méthode. L'élément passé est d'abord comparé aux éléments de la collection par hashCode()
, puis si les valeurs renvoyées par hashCode()
correspondent, par equals()
.
4. Comparer les collections : List
vsSet
Comparons deux types de collectes : List
et Set
Nous verrons les principales différences, quand l'une est plus avantageuse que l'autre, et inversement.
Essayons de comparer List et Set en utilisant des jouets comme exemple.
La List
collection (liste) est comme un ensemble de jouets disposés le long du mur dans une salle de jeux. Vous pouvez ajouter un jouet à la fin de la liste. Si vous en avez vraiment besoin, vous pouvez également l'insérer au milieu (mais certains jouets existants devront être déplacés).
Chaque jouet a un index. Vous pouvez faire référence à un jouet par son index et également remplacer le jouet numéro 7 par le jouet numéro 13. Vous pouvez supprimer le jouet numéro 4 de la liste. Enfin, vous pouvez apprendre l'index de chaque jouet de la liste.
La Set
collection (set) ressemble plus à une pile de jouets au milieu du sol. Vous pouvez ajouter un jouet à la pile et vous pouvez retirer un jouet de la pile. Mais ces jouets n'ont pas d'indice fixe qui leur est associé.
Ou supposons que vous choisissiez un jouet pour l'anniversaire de votre enfant. D'abord, vous vous demandez s'il a déjà le jouet. Tous les jouets qu'il possède déjà forment un ensemble de jouets que vous ne choisirez pas d'acheter.
De ce point de vue, vous pouvez voir que l'ordre des jouets dans un ensemble de "jouets qui existent déjà" n'a pas d'importance, ni que le garçon d'anniversaire ait deux instances d'un jouet particulier. Vous n'êtes pas intéressé par l'ordre ou le nombre de chaque jouet. Ce qui vous importe, c'est de connaître chaque jouet unique qui existe dans l'ensemble.
Pour des cas comme celui-ci, vous avez besoin de la Set
collection. Son implémentation la plus populaire est la HashSet
classe.