Test mit Null- und leeren Listen
In der Praxis der Programmierung ist es wichtig, Randfälle zu berücksichtigen, wie beispielsweise wenn eine Liste leer oder sogar null
sein kann. Unsere aktuelle containsDuplicates
-Methode funktioniert gut für Listen mit Elementen, aber was passiert, wenn wir eine leere Liste oder eine null
-Liste übergeben?
Lassen Sie uns dies testen, indem wir weitere Beispiele in unsere main
-Methode in ~/project/DuplicateDetector.java
hinzufügen. Öffnen Sie die Datei im Code-Editor und fügen Sie die folgenden Zeilen nach dem bestehenden Code in die main
-Methode ein:
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));
Speichern Sie die Datei (Strg+S oder Cmd+S).
Jetzt kompilieren und führen Sie das Programm erneut aus.
Kompilieren:
javac DuplicateDetector.java
Ausführen:
java DuplicateDetector
Sie sollten die Ausgabe für die leere Liste sehen:
List with duplicates: [apple, banana, apple, orange]
Contains duplicates? true
List without duplicates: [grape, mango, kiwi]
Contains duplicates? false
Empty list: []
Contains duplicates? false
Die Ausgabe für die leere Liste ist korrekt; eine leere Liste enthält keine Duplikate.
Wenn Sie jedoch die Zeile System.out.println("Contains duplicates? " + containsDuplicates(nullList));
einkommentieren und versuchen, zu kompilieren und auszuführen, erhalten Sie eine NullPointerException
. Dies geschieht, weil wir versuchen, ein HashSet
aus einer null
-Liste zu erstellen, was nicht erlaubt ist.
Um unsere containsDuplicates
-Methode robuster zu machen, sollten wir den Fall behandeln, dass die Eingabeliste null
ist. Wir können einen Check am Anfang der Methode hinzufügen.
Ändern Sie die containsDuplicates
-Methode in ~/project/DuplicateDetector.java
, um einen Null-Check einzubeziehen:
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();
}
Jetzt einkommentieren Sie die Zeile, die die null
-Liste testet, in der main
-Methode:
List<String> nullList = null;
System.out.println("\nNull list: " + nullList);
System.out.println("Contains duplicates? " + containsDuplicates(nullList)); // Expected: false
Speichern Sie die Datei (Strg+S oder Cmd+S).
Kompilieren und führen Sie das Programm ein letztes Mal aus.
Kompilieren:
javac DuplicateDetector.java
Ausführen:
java DuplicateDetector
Die Ausgabe sollte nun das Ergebnis für die null
-Liste enthalten, ohne dass das Programm abstürzt:
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
Durch das Hinzufügen des Null-Checks ist unsere containsDuplicates
-Methode nun robuster und kann null
-Eingaben gracefully handhaben. Dies ist eine wichtige Praxis in der Programmierung, um unerwartete Fehler zu vermeiden.