Probar con Listas Vacías y Nulas
En la programación del mundo real, es importante considerar casos extremos, como cuando una lista puede estar vacía o incluso ser null
. Nuestro método containsDuplicates
actual funciona bien para listas con elementos, pero ¿qué pasa si pasamos una lista vacía o una lista null
?
Probemos esto agregando más ejemplos a nuestro método main
en ~/project/DuplicateDetector.java
. Abre el archivo en el Editor de Código y agrega las siguientes líneas al método main
, después del código existente:
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));
Guarda el archivo (Ctrl+S o Cmd+S).
Ahora, compila y ejecuta el programa nuevamente.
Compila:
javac DuplicateDetector.java
Ejecuta:
java DuplicateDetector
Deberías ver la salida para la lista vacía:
List with duplicates: [apple, banana, apple, orange]
Contains duplicates? true
List without duplicates: [grape, mango, kiwi]
Contains duplicates? false
Empty list: []
Contains duplicates? false
La salida para la lista vacía es correcta; una lista vacía no contiene duplicados.
Sin embargo, si descomentas la línea System.out.println("Contains duplicates? " + containsDuplicates(nullList));
y intentas compilar y ejecutar, obtendrás una NullPointerException
. Esto sucede porque estamos intentando crear un HashSet
a partir de una lista null
, lo cual no está permitido.
Para hacer que nuestro método containsDuplicates
sea más robusto, debemos manejar el caso en el que la lista de entrada sea null
. Podemos agregar una comprobación al principio del método.
Modifica el método containsDuplicates
en ~/project/DuplicateDetector.java
para incluir una comprobación de null
:
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();
}
Ahora, descomenta la línea que prueba la lista null
en el método main
:
List<String> nullList = null;
System.out.println("\nNull list: " + nullList);
System.out.println("Contains duplicates? " + containsDuplicates(nullList)); // Expected: false
Guarda el archivo (Ctrl+S o Cmd+S).
Compila y ejecuta el programa una última vez.
Compila:
javac DuplicateDetector.java
Ejecuta:
java DuplicateDetector
La salida ahora debe incluir el resultado para la lista null
sin que se produzca un error:
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
Al agregar la comprobación de null
, nuestro método containsDuplicates
es ahora más robusto y puede manejar entradas null
de manera adecuada. Esta es una práctica importante en la programación para evitar errores inesperados.