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
List
ArrayList
Liste
LinkedList
Liste liée
Vector
Vecteur
Stack
Empiler
Set
HashSet
Ensemble
TreeSet
LinkedHashSet
Queue
PriorityQueue
File d'attente
ArrayQueue
Map
HashMap
Carte/Dictionnaire
TreeMap
HashTable

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' Collectioninterface, 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' Collectioninterface).

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' Collectioninterface. Les types List, Setet Queuesont tous des collections. Les collections au sens large sont généralement appelées conteneurs . Ceux-ci incluent des types comme Mapet des tableaux.


2. HashSetcollecte

La HashSetclasse est une collection d'ensembles typique. À bien des égards, il est similaire à la ArrayListclasse. À certains égards, c'est une version plus primitive.

Vous pouvez créer un HashSetobjet à l'aide d'une instruction telle que :

HashSet<Type> name = new HashSet<Type>();

Typeest le type des éléments que nous stockerons dans la HashSetcollection.

La HashSetclasse a des méthodes comme celle-ci :

Méthode Description
void add(Type value)
Ajoute l' valueélément à la collection
boolean remove(Type value)
Supprime l' valueélément de la collection.
Renvoie trues'il y avait un tel élément
boolean contains(Type value)
Vérifie si la collection a un valueélément
void clear()
Efface la collection en supprimant tous les éléments
int size()
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
HashSet<String> set = new HashSet<String>();

set.add("Hallo");
set.add("Hello");
set.add("Hola");
set.add("Bonjour");
set.add("Ciao");
set.add("Namaste");

Scanner console = new Scanner(System.in);
String str = console.nextLine();

if (set.contains(str))
   System.out.println("Goodbye!");
Créez un HashSetobjet qui stocke Stringdes éléments.


Nous ajoutons des salutations dans différentes langues à la setvariable.




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 Setcollection 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 : ListvsSet

Comparons deux types de collectes : Listet SetNous 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 Listcollection (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 Setcollection (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 Setcollection. Son implémentation la plus populaire est la HashSetclasse.