Stack Overflow en español es un sitio de
preguntas y respuestas para
programadores y profesionales de la
informática. Solo te toma un minuto
registrarte.
Regístrate para unirte a esta comunidad
Cualquiera puede formular una pregunta
Cualquiera puede responder
Se vota a favor de las
mejores respuestas, y éstas
suben a los primeros puestos
¿List o ArrayList en Java?
Formulada hace 2 años y 7 meses Activa hace 2 años y 7 meses Vista 18k veces
¿Cuál es la diferencia entre las siguientes implementaciones?
1 ArrayList<String> xxx = new ArrayList<>();
List<String> zzz = new ArrayList<>();
java
3
Compartir Mejora esta pregunta Seguir formulada el 7 jun. 18 a las 20:55
Orici
6,521 3 25 54
3 respuestas Activo Más antiguo Votos
List es una colección, y una colección puede ser interfaces y clase abstracta que nos permite
identificar los objetos independientemente de la implementación. Es decir, son genéricas.
4
Mientras, un ArrayList es contenedor que contiene una implementación de la colección List.
Aquí puedes ver un ejemplo de las colecciones y sus relaciones en Java:
https://en.proft.me/2013/11/3/java-collection-framework-cheat-sheet/
En base a esto, List es una interfaz genérica que representa una colección ordenada de
elementos que pueden repetirse.
Mientras, dos listas de propósito general serían las clases LinkedList y ArrayList y de
propósito específico, Vector y CopyOnWriteArrayList.
En tu duda, la ArrayList es un array que se maneja como una clase y no tiene tamaño fijo.
Es eficiente cuando se realizan muchos acceso y en este caso los elementos se añaden al
final. Permite que se puedan eliminar elementos intermedios, pero eso provocará un
desplazamiento de índices.
En cambio, para una clase LinkedList tendremos una lista enlazada en la que los elementos
se añaden en cualquier parte de la lista muy fácilmente. Aquí, para encontrar un elemento
hay que recorrer la lista. Es eficiente cuando el tamaño fluctúa y sobre todo en posiciones
centrales.
¿Qué sucede si utilizas List como lo haces en tu caso?, que podrías cambiar el tipo de zzz a
LinkedList en su definición y todo sería compatible 100% y fácilmente. No obstante, en el
primer caso de xxx tendrías que cambiar en todos los sitios el tipo debido a que estas
implementando un ArrayList y podrías tener problemas si lo cambias a LinkedLIst. Por eso
se recomienda el uso de List, como lo haces de zzz.
Compartir Mejora esta respuesta editada el 7 jun. 18 a las 22:00 respondida el 7 jun. 18 a las 21:10
Seguir Orici CGG
6,521 3 25 54 471 1 6 8
public static void insert(List<Dato> datos) {
for(Dato dato:datos){
0 db.executeUpdate("insert into datos(desc,cantidad) values(:desc,:cantidad)",
new Object[]{dato.getDescripcion(),dato.getCantidad()});
}
}
public static void insert(Dato[] datos) {
for(Dato dato:datos){
db.executeUpdate("insert into datos(desc,cantidad) values(:desc,:cantidad)",
new Object[]{dato.getDescripcion(),dato.getCantidad()});
}
}
Como puedes ver, es prácticamente lo mismo, la diferencia es que al invocar el primer
método puedes pasar como párametro un ArrayList, LinkedList, Vector o tu propia clase que
implemente la interfaz List
un enlace que te puede ayudar https://stackoverflow.com/questions/716597/array-or-list-in-
java-which-is-faster
Compartir Mejora esta respuesta Seguir respondida el 7 jun. 18 a las 21:08
Camilo Andres
1
List es una interface mientras que ArrayList es una de las tantas implementaciones de la
interface List (a su vez List extiende de la interface Collection).
0
A priori, entonces, no hay diferencia, polimórficamente vas a estar trabajando con un
ArrayList. Pero me parece mas correcto usar la segunda sentencia y trabajar contra la
interface y nunca contra el tipo concreto. De esta manera tenes la flexibilidad de instanciar
otra implementación diferente de la interface List (LinkedList por ejemplo) y tu código va a
seguir funcionando igual, gracias a que los contratos se mantienen.
Compartir Mejora esta respuesta Seguir respondida el 7 jun. 18 a las 21:13
Alejandro Giorgi
326 1 5