Utilisation de HashSet pour une vérification efficace des doublons
Dans l'étape précédente, nous avons utilisé des boucles imbriquées pour trouver des doublons, ce qui est simple mais peut être lent pour de grands tableaux (arrays). Dans cette étape, nous allons apprendre une méthode plus efficace pour trouver des doublons en utilisant un HashSet
.
Un HashSet
est une collection en Java qui stocke des éléments uniques. Cela signifie que si vous essayez d'ajouter un élément qui est déjà dans le HashSet
, l'opération d'ajout échouera (ou plutôt, retournera false
). Nous pouvons tirer parti de cette propriété pour détecter efficacement les doublons.
Voici l'idée : nous parcourons le tableau (array), et pour chaque élément, nous essayons de l'ajouter à un HashSet
. Si la méthode add()
retourne false
, cela signifie que l'élément est déjà dans l'ensemble, et donc, c'est un doublon.
Créons un nouveau fichier Java nommé FindDuplicatesHashSet.java
dans votre répertoire ~/project
.
Ouvrez le fichier FindDuplicatesHashSet.java
dans l'Éditeur de code et ajoutez le code Java suivant :
import java.util.HashSet;
import java.util.Set;
public class FindDuplicatesHashSet {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 2, 7, 8, 8, 3};
// Create a HashSet to store unique elements
Set<Integer> uniqueElements = new HashSet<>();
System.out.println("Finding duplicate elements using HashSet:");
// Iterate through the array
for (int number : numbers) {
// Try to add the element to the HashSet
// If add() returns false, the element is a duplicate
if (!uniqueElements.add(number)) {
System.out.println("Duplicate found: " + number);
}
}
}
}
Examinons les nouvelles parties de ce code :
import java.util.HashSet;
et import java.util.Set;
: Ces lignes importent les classes nécessaires pour utiliser HashSet
.
Set<Integer> uniqueElements = new HashSet<>();
: Cette ligne crée un HashSet
vide qui stockera des objets Integer
. Nous utilisons Set
comme type car HashSet
implémente l'interface Set
.
for (int number : numbers)
: Il s'agit d'une boucle for améliorée (également connue sous le nom de boucle for-each), qui est un moyen pratique de parcourir chaque élément du tableau (array) numbers
.
!uniqueElements.add(number)
: C'est la logique principale. uniqueElements.add(number)
tente d'ajouter le number
actuel au HashSet
. Si le nombre est déjà présent, add()
retourne false
. L'opérateur !
inverse ce résultat, donc la condition if
est vraie seulement lorsque add()
retourne false
, indiquant un doublon.
Enregistrez le fichier (Ctrl + S
ou Cmd + S
).
Maintenant, compilez le code Java dans le Terminal :
javac FindDuplicatesHashSet.java
Si la compilation réussit, exécutez le programme :
java FindDuplicatesHashSet
Vous devriez voir la sortie listant les éléments dupliqués trouvés en utilisant la méthode HashSet
. Remarquez que cette méthode est généralement plus rapide que l'approche utilisant des boucles imbriquées, en particulier pour les grands tableaux (arrays), car l'ajout et la vérification d'éléments dans un HashSet
sont très efficaces.