Java HashSet Class: Guide Ultime pour les Débutants

Introduction

Bonjour, futurs développeurs Java ! Aujourd'hui, nous allons plonger dans le monde fascinant des HashSet en Java. Ne vous inquiétez pas si vous êtes nouveau en programmation ; je vais vous guider tout au long de ce voyage étape par étape, comme j'ai fait pour d'innombrables étudiants au fil des années. Pensez au HashSet comme une boîte magique qui peut stocker des éléments uniques - pas de doublons autorisés ! C'est comme avoir un tiroir spécial où vous ne pouvez mettre qu'un seul exemplaire de chaque type de chaussette. Commençons !

Java - HashSet

Déclaration de Classe

En Java, HashSet fait partie du cadre de collections Java. Pour l'utiliser, nous devons d'abord l'importer :

import java.util.HashSet;

La déclaration de base d'un HashSet se présente ainsi :

HashSet<E> hs = new HashSet<E>();

Ici, 'E' est un espace réservé pour le type d'éléments que vous souhaitez stocker dans votre HashSet. Par exemple, si vous souhaitez stocker des chaînes :

HashSet<String> fruitBasket = new HashSet<String>();

Paramètres

Lors de la création d'un HashSet, vous pouvez spécifier deux paramètres optionnels :

  1. Capacité initiale : Le nombre de "bacs" que HashSet utilisera pour stocker les éléments.
  2. Facteur de charge : Une mesure de la saturation du HashSet avant qu'il ne soit automatiquement agrandi.

Ne vous inquiétez pas trop de ces paramètres pour le moment. Pensez-y comme des paramètres avancés pour votre boîte magique !

Constructeurs de Classe

HashSet fournit quatre constructeurs. Examinons-les chacun :

// Constructeur 1 : Crée un HashSet vide avec une capacité initiale par défaut (16) et un facteur de charge (0.75)
HashSet<String> set1 = new HashSet<>();

// Constructeur 2 : Crée un HashSet contenant les éléments de la collection spécifiée
Collection<String> collection = Arrays.asList("Pomme", "Banane", "Cerise");
HashSet<String> set2 = new HashSet<>(collection);

// Constructeur 3 : Crée un HashSet vide avec la capacité initiale spécifiée et le facteur de charge par défaut (0.75)
HashSet<String> set3 = new HashSet<>(20);

// Constructeur 4 : Crée un HashSet vide avec la capacité initiale et le facteur de charge spécifiés
HashSet<String> set4 = new HashSet<>(20, 0.8f);

Méthodes de Classe

Voici un tableau des méthodes les plus couramment utilisées de HashSet :

Méthode Description
add(E e) Ajoute l'élément spécifié à ce ensemble s'il n'est pas déjà présent
clear() Supprime tous les éléments de cet ensemble
contains(Object o) Retourne vrai si cet ensemble contient l'élément spécifié
isEmpty() Retourne vrai si cet ensemble ne contient pas d'éléments
remove(Object o) Supprime l'élément spécifié de cet ensemble s'il est présent
size() Retourne le nombre d'éléments dans cet ensemble

Méthodes Héritées

HashSet hérite des méthodes de ses classes parentes. En voici quelques-unes notables :

  • De Set : addAll(), containsAll(), equals(), hashCode(), removeAll(), retainAll()
  • De Collection : iterator(), toArray()
  • De Object : clone(), finalize(), getClass(), notify(), notifyAll(), wait()

Exemple d'ajout d'Éléments à un HashSet

Mettons en pratique nos connaissances avec un exemple amusant. Imaginez que nous créons un programme pour suivre les saveurs uniques de glace à notre glacier :

import java.util.HashSet;

public class IceCreamShop {
public static void main(String[] args) {
// Crée un nouveau HashSet pour stocker les saveurs de glace
HashSet<String> flavors = new HashSet<>();

// Ajoute quelques saveurs
flavors.add("Vanille");
flavors.add("Chocolat");
flavors.add("Fraise");
flavors.add("Menthe à la chips");

// Essaie d'ajouter un doublon
boolean added = flavors.add("Vanille");

System.out.println("Vanille ajoutée à nouveau ? " + added);
System.out.println("Nos saveurs de glace : " + flavors);
System.out.println("Nous avons " + flavors.size() + " saveurs uniques !");

// Vérifie si nous avons une saveur spécifique
String searchFlavor = "Rocky Road";
if (flavors.contains(searchFlavor)) {
System.out.println("Oui, nous avons " + searchFlavor + " !");
} else {
System.out.println("Désolé, nous n'avons pas " + searchFlavor + ".");
}

// Supprime une saveur
flavors.remove("Fraise");
System.out.println("Saveurs mises à jour après suppression de Fraise : " + flavors);
}
}

Sortie

Lorsque vous exécutez ce programme, vous verrez quelque chose comme ceci :

Vanille ajoutée à nouveau ? false
Nos saveurs de glace : [Vanille, Menthe à la chips, Chocolat, Fraise]
Nous avons 4 saveurs uniques !
Désolé, nous n'avons pas Rocky Road.
Saveurs mises à jour après suppression de Fraise : [Vanille, Menthe à la chips, Chocolat]

Décomposons ce qui s'est passé :

  1. Nous avons créé un HashSet appelé flavors pour stocker nos saveurs de glace.
  2. Nous avons ajouté quatre saveurs : Vanille, Chocolat, Fraise et Menthe à la chips.
  3. Nous avons essayé d'ajouter Vanille à nouveau, mais add() a retourné false car HashSet n'autorise pas les doublons.
  4. Nous avons imprimé toutes nos saveurs. Notez que l'ordre peut être différent de celui dans lequel nous les avons ajoutées - HashSet ne maintient pas l'ordre d'insertion.
  5. Nous avons vérifié si nous avions la saveur Rocky Road en utilisant contains(). Nous ne l'avions pas, donc il a imprimé un message de désolation.
  6. Enfin, nous avons supprimé Fraise et imprimé le nouvel ensemble de saveurs.

Et voilà ! Vous avez juste créé votre premier HashSet et utilisé quelques-unes de ses méthodes les plus importantes. Rappelez-vous, HashSet est excellent lorsque vous avez besoin de stocker des éléments uniques et que vous ne vous souciez pas de l'ordre. C'est comme un sac de billes où chaque bille est d'une couleur différente - vous pouvez facilement vérifier si vous avez une couleur spécifique, mais vous ne pouvez pas contrôler l'ordre dans lequel elles sortent lorsque vous versez le sac.

Au fur et à mesure de votre parcours Java, vous trouverez HashSet extrêmement utile dans de nombreux scénarios. Continuez à pratiquer, et bientôt vous serez un pro du HashSet ! Bon codage !

Credits: Image by storyset