Tester avec des listes nulles et vides
En programmation réelle, il est important de prendre en compte les cas limites, comme lorsque une liste peut être vide ou même null
. Notre méthode containsDuplicates
actuelle fonctionne bien pour les listes avec des éléments, mais que se passe-t-il si nous passons une liste vide ou une liste null
?
Testons cela en ajoutant plus d'exemples à notre méthode main
dans ~/project/DuplicateDetector.java
. Ouvrez le fichier dans l'Éditeur de code et ajoutez les lignes suivantes à la méthode main
, après le code existant :
System.out.println("\nEmpty list: " + new ArrayList<>());
System.out.println("Contains duplicates? " + containsDuplicates(new ArrayList<>())); // Expected: false
List<String> nullList = null;
System.out.println("\nNull list: " + nullList);
// The following line will cause a NullPointerException if not handled
// System.out.println("Contains duplicates? " + containsDuplicates(nullList));
Enregistrez le fichier (Ctrl+S ou Cmd+S).
Maintenant, compilez et exécutez le programme à nouveau.
Compilez :
javac DuplicateDetector.java
Exécutez :
java DuplicateDetector
Vous devriez voir le résultat pour la liste vide :
List with duplicates: [apple, banana, apple, orange]
Contains duplicates? true
List without duplicates: [grape, mango, kiwi]
Contains duplicates? false
Empty list: []
Contains duplicates? false
Le résultat pour la liste vide est correct ; une liste vide ne contient pas de doublons.
Cependant, si vous décommentez la ligne System.out.println("Contains duplicates? " + containsDuplicates(nullList));
et que vous essayez de compiler et d'exécuter, vous obtiendrez une NullPointerException
. Cela se produit car nous essayons de créer un HashSet
à partir d'une liste null
, ce qui n'est pas autorisé.
Pour rendre notre méthode containsDuplicates
plus robuste, nous devrions gérer le cas où la liste d'entrée est null
. Nous pouvons ajouter une vérification au début de la méthode.
Modifiez la méthode containsDuplicates
dans ~/project/DuplicateDetector.java
pour inclure une vérification de nullité :
public static boolean containsDuplicates(List<String> list) {
// Handle null input
if (list == null) {
return false; // A null list does not contain duplicates
}
// Create a HashSet from the list
Set<String> uniqueElements = new HashSet<>(list);
// Compare the size of the list with the size of the HashSet
return list.size() != uniqueElements.size();
}
Maintenant, décommentez la ligne qui teste la liste null
dans la méthode main
:
List<String> nullList = null;
System.out.println("\nNull list: " + nullList);
System.out.println("Contains duplicates? " + containsDuplicates(nullList)); // Expected: false
Enregistrez le fichier (Ctrl+S ou Cmd+S).
Compilez et exécutez le programme une dernière fois.
Compilez :
javac DuplicateDetector.java
Exécutez :
java DuplicateDetector
Le résultat devrait maintenant inclure le résultat pour la liste null
sans planter :
List with duplicates: [apple, banana, apple, orange]
Contains duplicates? true
List without duplicates: [grape, mango, kiwi]
Contains duplicates? false
Empty list: []
Contains duplicates? false
Null list: null
Contains duplicates? false
En ajoutant la vérification de nullité, notre méthode containsDuplicates
est maintenant plus robuste et peut gérer les entrées null
de manière gracieuse. C'est une pratique importante en programmation pour éviter les erreurs inattendues.