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\nConvertir 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\nEn 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\nLa forma más popular de convertir un array en una lista en Java es el método Arrays.asList(). Se ve engañosamente simple:
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\n1. El tamaño es fijo
\nLa lista obtenida mediante Arrays.asList() tiene un tamaño fijo. Intenta agregar un elemento:
fruitList.add("orange"); // UnsupportedOperationException!\n\nObtendrás una UnsupportedOperationException. ¿Por qué? Porque internamente no es un ArrayList real, sino una implementación interna que simplemente envuelve el array.
2. Los cambios en el array se reflejan en la lista
\nLa lista es una "ventana" al array original. Si modificas el array, la lista también cambia:
\n\nfruits[0] = "apricot";\nSystem.out.println(fruitList.get(0)); // apricot\n\nEsto puede provocar errores difíciles de detectar, especialmente si el array se pasa entre métodos.
\n\n3. Los tipos primitivos no funcionan
\nIntenta convertir un array int en una lista:
\n\nint[] numbers = {1, 2, 3};\nList<int[]> list = Arrays.asList(numbers); // no es List<Integer>, ¡es List<int[]>!\n\nEn 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\n5 formas de convertir un array en una lista en Java
\n\nVeamos todos los métodos principales para convertir un array en una lista en Java con ejemplos y explicaciones.
\n\nForma 1: El clásico Arrays.asList()
\nEs adecuado cuando necesitas una lista de solo lectura o estás seguro de que no cambiarás su tamaño.
\n\nString[] 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\nForma 2: Crear un nuevo ArrayList
\nLa forma más segura de convertir un array en ArrayList en Java es crear una nueva instancia:
\n\nString[] animals = {"cat", "dog", "bird"};\nList<String> animalList = new ArrayList<>(Arrays.asList(animals));\n// Ahora se puede agregar y eliminar\nanimalList.add("fish"); // OK\n\nEste enfoque proporciona una lista mutable completa, independiente del array original.
\n\nForma 3: Collections.addAll()
\nUn método elegante para convertir un array en una colección Java. Es especialmente útil cuando la lista ya existe:
\n\nString[] 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);