Java - Set Interface

Bienvenue, futurs programmeurs Java ! Aujourd'hui, nous allons entreprendre un voyage passionnant à travers le monde de l'interface Set de Java. En tant que votre enseignant de science informatique bienveillant du quartier, je suis là pour vous guider dans cette aventure, étape par étape. Alors, prenez vos sacs à dos virtuels, et plongeons dedans !

Java - Set Interface

Qu'est-ce qu'un Set ?

Avant de plonger dans les spécificités Java, comprens ce qu'est un Set dans le monde réel. Imaginez que vous avez une boîte de billes. Dans cette boîte, vous ne voulez pas de billes en double. Chaque bille doit être unique. C'est essentiellement ce qu'est un Set en programmation - une collection d'éléments uniques.

Les bases de l'interface Set en Java

En Java, l'interface Set fait partie du Framework Collections de Java. Elle étend l'interface Collection et représente une collection qui ne peut pas contenir d'éléments en double. Pensez-y comme notre boîte de billes uniques !

Caractéristiques clés d'un Set

  1. Pas d'éléments en double
  2. Au plus un élément null (pour la plupart des implémentations)
  3. Pas d'ordre garanti des éléments (sauf si vous utilisez une implémentation spécifique comme LinkedHashSet)

Implémentations de Set en Java

Java fournit plusieurs implémentations de l'interface Set. Jetons un œil aux trois plus courantes :

  1. HashSet
  2. TreeSet
  3. LinkedHashSet

Chacune de ces implémentations a ses propres caractéristiques et cas d'utilisation. Explorons-les une par une.

HashSet

HashSet est comme un sac où vous jetez vos éléments uniques. C'est rapide, mais il ne maintient pas d'ordre.

import java.util.HashSet;
import java.util.Set;

public class HashSetExample {
public static void main(String[] args) {
Set<String> fruits = new HashSet<>();

fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
fruits.add("Apple");  // Cela ne sera pas ajouté car c'est un doublon

System.out.println(fruits);
}
}

Output :

[Apple, Orange, Banana]

Dans cet exemple, nous avons créé un HashSet de fruits. Notez comment le second "Apple" n'a pas été ajouté, et l'ordre des éléments n'est pas garanti.

TreeSet

TreeSet est comme organiser vos éléments uniques en ordre alphabétique ou numérique. Il est plus lent que HashSet mais maintient un ordre trié.

import java.util.Set;
import java.util.TreeSet;

public class TreeSetExample {
public static void main(String[] args) {
Set<Integer> numbers = new TreeSet<>();

numbers.add(5);
numbers.add(2);
numbers.add(8);
numbers.add(1);

System.out.println(numbers);
}
}

Output :

[1, 2, 5, 8]

Voyez comment les nombres sont automatiquement triés ? C'est la magie de TreeSet !

LinkedHashSet

LinkedHashSet est un mélange de HashSet et de LinkedList. Il maintient l'ordre dans lequel les éléments ont été insérés tout en assurant l'unicité.

import java.util.LinkedHashSet;
import java.util.Set;

public class LinkedHashSetExample {
public static void main(String[] args) {
Set<String> colors = new LinkedHashSet<>();

colors.add("Red");
colors.add("Green");
colors.add("Blue");
colors.add("Red");  // Cela ne sera pas ajouté car c'est un doublon

System.out.println(colors);
}
}

Output :

[Red, Green, Blue]

Notez comment l'ordre d'insertion est maintenu, mais les duplicates sont toujours interdits.

Opérations courantes sur un Set

Maintenant que nous comprenons les bases, examinons quelques opérations courantes que nous pouvons effectuer avec des Sets.

Ajouter des éléments

Nous avons déjà vu comment ajouter des éléments en utilisant la méthode add(). Voici un rappel rapide :

Set<String> set = new HashSet<>();
set.add("Element");

Supprimer des éléments

Pour supprimer un élément, nous utilisons la méthode remove() :

set.remove("Element");

Vérifier si un élément existe

Nous pouvons utiliser la méthode contains() pour vérifier si un élément est dans le Set :

boolean exists = set.contains("Element");

Obtenir la taille du Set

Pour obtenir le nombre d'éléments dans un Set, nous utilisons la méthode size() :

int size = set.size();

Effacer le Set

Pour supprimer tous les éléments d'un Set, nous utilisons la méthode clear() :

set.clear();

Méthodes de l'interface Set

Voici un tableau des méthodes les plus couramment utilisées de l'interface Set :

Méthode Description
add(E e) Ajoute l'élément spécifié au set s'il n'est pas déjà présent
clear() Supprime tous les éléments du set
contains(Object o) Retourne true si le set contient l'élément spécifié
isEmpty() Retourne true si le set ne contient aucun élément
remove(Object o) Supprime l'élément spécifié du set s'il est présent
size() Retourne le nombre d'éléments dans le set
toArray() Retourne un tableau contenant tous les éléments du set

Exemple du monde réel : Un compteur de visiteurs uniques

Mettons nos connaissances à l'œuvre avec un exemple du monde réel. Imaginez que vous construisez un compteur de visiteurs simple pour un site web, mais vous ne souhaitez compter que les visiteurs uniques.

import java.util.HashSet;
import java.util.Set;

public class UniqueVisitorCounter {
private Set<String> visitors;

public UniqueVisitorCounter() {
visitors = new HashSet<>();
}

public void addVisitor(String visitorId) {
visitors.add(visitorId);
}

public int getUniqueVisitorCount() {
return visitors.size();
}

public static void main(String[] args) {
UniqueVisitorCounter counter = new UniqueVisitorCounter();

counter.addVisitor("user1");
counter.addVisitor("user2");
counter.addVisitor("user1");  // Doublon, ne sera pas compté
counter.addVisitor("user3");

System.out.println("Visiteurs uniques : " + counter.getUniqueVisitorCount());
}
}

Output :

Visiteurs uniques : 3

Dans cet exemple, nous utilisons un HashSet pour stocker les IDs de visiteurs. Même si un visiteur visite plusieurs fois (comme "user1"), il n'est compté qu'une seule fois. C'est la puissance des Sets en action !

Conclusion

Félicitations ! Vous avez刚刚迈出了进入Java Set Interface世界的第一步。我们已经覆盖了基础知识, exploré différentes implémentations, et même construit une application du monde réel. Souvenez-vous, la pratique fait toujours parfait, donc n'hésitez pas à expérimenter avec ces concepts.

Alors que nous terminons, voici un peu d'humour de programmation pour vous : Pourquoi les développeurs Java portent-ils des lunettes ? Parce qu'ils ne voient pas C#! (Comprenez-vous ? C-sharp ? Bon, je me senssortir...)

Continuez à coder, continuez à apprendre, et surtout, continuez à vous amuser avec Java !

Credits: Image by storyset