Array a lista en Java: 5 formas y trampas ocultas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Array a lista en Java: de principiante a profesional en 10 minutos

\n\n

¿Alguna vez has escrito código que funcionaba perfectamente con un array, y de repente necesitabas una lista? O, peor aún, ¿recibías una misteriosa excepción al intentar agregar un elemento a una lista creada a partir de un array? Si es así, has llegado al lugar indicado.

\n\n

Convertir array to list en Java es una de esas tareas que parecen sencillas, pero esconden muchas sorpresas. En Stack Overflow, esta pregunta ha acumulado cientos de miles de visitas, y no es para menos: detrás de la aparente simplicidad se esconden matices importantes sobre el trabajo con colecciones.

\n\n

En este artículo, analizaremos todas las formas legales de convertir un array en una lista en Java, aprenderemos a evitar errores típicos y descubriremos qué método elegir en cada situación. ¡Allá vamos!

\n\n

¿Por qué Arrays.asList() es una trampa?

\n\n

La forma más popular de convertir un array en una lista en Java es el método Arrays.asList(). Se ve engañosamente simple:

\n\n
String[] fruits = {"apple", "banana", "cherry"};\nList<String> fruitList = Arrays.asList(fruits);
\n\n

¿Eso es todo? Casi. Pero hay tres importantes "peros" que no todos conocen:

\n\n

1. El tamaño es fijo

\n

La lista obtenida mediante Arrays.asList() tiene un tamaño fijo. Intenta agregar un elemento:

\n\n
fruitList.add("orange"); // UnsupportedOperationException!
\n\n

Obtendrás una UnsupportedOperationException. ¿Por qué? Porque internamente no es un ArrayList real, sino una implementación interna que simplemente envuelve el array.

\n\n

2. Los cambios en el array se reflejan en la lista

\n

La lista es una "ventana" al array original. Si modificas el array, la lista también cambia:

\n\n
fruits[0] = "apricot";\nSystem.out.println(fruitList.get(0)); // apricot
\n\n

Esto puede provocar errores difíciles de detectar, especialmente si el array se pasa entre métodos.

\n\n

3. Los tipos primitivos no funcionan

\n

Intenta convertir un array int en una lista:

\n\n
int[] numbers = {1, 2, 3};\nList<int[]> list = Arrays.asList(numbers); // no es List<Integer>, ¡es List<int[]>!
\n\n

En lugar de una lista de números, obtienes una lista que contiene un solo elemento: el array completo. Java no puede empaquetar automáticamente primitivos en una lista.

\n\n

5 formas de convertir un array en una lista en Java

\n\n

Veamos todos los métodos principales para convertir un array en una lista en Java con ejemplos y explicaciones.

\n\n

Forma 1: El clásico Arrays.asList()

\n

Es adecuado cuando necesitas una lista de solo lectura o estás seguro de que no cambiarás su tamaño.

\n\n
String[] colors = {"red", "green", "blue"};\nList<String> colorList = Arrays.asList(colors);\n// Funciona: lectura, reemplazo de elementos\ncolorList.set(0, "yellow");\n// No funciona: agregar, eliminar
\n\n

Forma 2: Crear un nuevo ArrayList

\n

La forma más segura de convertir un array en ArrayList en Java es crear una nueva instancia:

\n\n
String[] animals = {"cat", "dog", "bird"};\nList<String> animalList = new ArrayList<>(Arrays.asList(animals));\n// Ahora se puede agregar y eliminar\nanimalList.add("fish"); // OK
\n\n

Este enfoque proporciona una lista mutable completa, independiente del array original.

\n\n

Forma 3: Collections.addAll()

\n

Un método elegante para convertir un array en una colección Java. Es especialmente útil cuando la lista ya existe:

\n\n
String[] cities = {"Moscow", "Paris", "London"};\nList<String> cityList = new ArrayList<>();\nCollections.addAll(cityList, cities);\n// O en una sola línea:\nList<String> cityList2 = new ArrayList<>(cities.length);\nCollections.addAll(cityList2, cities);

Blogs

Book Recommendations