Java 26
Ejercicios de Java sobre Colecciones
6 ejercicios de Colecciones en Java. Piensa la respuesta antes de abrirla: la explicación dice por qué las demás opciones fallan.
1 · Completa el hueco · nivel 1
Completa para añadir un nombre a la lista y mostrar cuántos hay.
List<String> names = new ArrayList<>();names.___("Pablo");System.out.println(names.___());- add
- size
- push
- length
Ver la respuesta
Respuesta: add · size
List<String> names = new ArrayList<>();names.add("Pablo");System.out.println(names.size());Las listas de Java añaden con add() y dicen cuántos elementos tienen con size(). length es de los arrays y de los String.
2 · Elige la respuesta · nivel 2
¿Qué ocurre al ejecutar la segunda línea?
List<String> names = List.of("Ana", "Luis");names.add("Eva");- ALanza UnsupportedOperationException
- BAñade "Eva" al final
- CNo compila
- DDevuelve false y no cambia la lista
Ver la respuesta
Respuesta: A. Lanza UnsupportedOperationException
List.of() devuelve una lista inmutable. Compila porque add() existe en la interfaz List, pero falla en tiempo de ejecución.
3 · Elige la respuesta · nivel 2
¿Qué imprime este código?
Set<String> tags = new HashSet<>(List.of("java", "kotlin"));System.out.println(tags.add("java") + " " + tags.size());- Afalse 2
- Btrue 3
- Ctrue 2
- DLanza IllegalArgumentException
Ver la respuesta
Respuesta: A. false 2
Un Set no admite duplicados: add() devuelve false si el elemento ya estaba y el tamaño no cambia.
4 · Elige la respuesta · nivel 2
¿Qué imprime este código?
List<String> names = new ArrayList<>(List.of("Ana", "Luis", "Marta"));names.remove(0);System.out.println(names.get(0));- ALuis
- BAna
- CMarta
- Dnull
Ver la respuesta
Respuesta: A. Luis
remove(0) quita el primer elemento y los demás se desplazan una posición. Ahora Luis está en el índice 0.
5 · Encuentra el fallo · nivel 2
Lanza ConcurrentModificationException. ¿Qué línea lo provoca?
1List<Integer> numbers = new ArrayList<>(List.of(1, 2, 3, 4));2for (Integer n : numbers) {3 if (n % 2 == 0) {4 numbers.remove(n);5 }6}Ver la respuesta
El fallo está en la línea 4:
numbers.remove(n);No se puede modificar una lista mientras se recorre con for-each. La alternativa es numbers.removeIf(n -> n % 2 == 0).
6 · Encuentra el fallo · nivel 2
Quiere quitar el id 10 de la lista, pero lanza IndexOutOfBoundsException. ¿Qué línea tiene el fallo?
1List<Integer> ids = new ArrayList<>(List.of(10, 20, 30));2ids.remove(10);3System.out.println(ids);Ver la respuesta
El fallo está en la línea 2:
ids.remove(10);Se arregla conids.remove(Integer.valueOf(10));.List tiene remove(int índice) y remove(Object elemento). Con un int literal se elige la versión por índice, y la posición 10 no existe. Integer.valueOf(10) fuerza la versión que busca el elemento.