Categorías
Collections

¿Cómo convertir Array a ArrayList en Java?

Este artículo analiza las respuestas de las preguntas más votadas en Stack Overflow. La persona que hizo esta pregunta obtuvo muchos puntos de reputación, lo que podría otorgarle permisos para hacer muchas cosas en Stack Overflow. Esto no tiene sentido para mí, pero primero echemos un vistazo a la pregunta.

La pregunta es «¿cómo convertir la siguiente matriz en una ArrayList?».

Element[] array = {new Element(1),new Element(2),new Element(3)};

1. Respuesta más popular y aceptada

La respuesta más popular y aceptada es la siguiente:

ArrayList<Element> arrayList = new ArrayList<Element>(Arrays.asList(array));

Primero, echemos un vistazo a Java Doc para el método constructor de ArrayList.

ArrayList (Colección c): construye una lista que contiene los elementos de la colección especificada, en el orden en que los devuelve el iterador de la colección.

Entonces, lo que hace el constructor es lo siguiente:
1. Convierta la colección c en una matriz
2. Copie la matriz en la propia matriz posterior de ArrayList llamada «elementData»

Aquí está el código fuente de Contructor of ArrayList.

public ArrayList(Collection<? extends E> c) {
       elementData = c.toArray();
       size = elementData.length;
 
       if (elementData.getClass() != Object[].class)
             elementData = Arrays.copyOf(elementData, size, Object[].class);
}

2. Siguiente respuesta popular

La siguiente respuesta popular es:

List<Element> list = Arrays.asList(array);

No es el mejor, porque el tamaño de la lista devuelto por asList() está arreglado. En realidad, la lista devuelta no es java.util.ArrayList, pero una clase estática privada definida dentro java.util.Arrays. Sabemos ArrayList se implementa esencialmente como una matriz, y la lista devuelta por asList() es una lista de tamaño fijo respaldada por la matriz original. De esta manera, si agrega o elimina elementos de la lista devuelta, se lanzará una UnsupportedOperationException.

list.add(new Element(4));
Exception in thread "main" java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList
	at collection.ConvertArray.main(ConvertArray.java:22)

3. Otra solución

Esta solución es del comentario de Otto a continuación.

Element[] array = {new Element(1), new Element(2)};
List<element> list = new ArrayList<element>(array.length);
Collections.addAll(list, array);

4. Indicaciones de la pregunta

El problema no es difícil, pero sí interesante. Todos los programadores de Java conocen ArrayList, pero es fácil cometer ese error. Supongo que por eso esta pregunta es tan popular. Si se hiciera una pregunta similar sobre una biblioteca Java en un dominio específico, sería menos probable que se hiciera tan popular.

Hay varias respuestas que brindan la misma solución. Esto también es cierto para muchas otras preguntas en Stack Overflow, ¡supongo que a las personas simplemente no les importa lo que digan los demás si les gustaría responder una pregunta!

Referencia: El enlace de la pregunta de stackoverflow

  Práctica sencilla con Scanner en Java

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *