En Java, tanto List como ArrayList son conceptos fundamentales al trabajar con colecciones. Sin embargo, es importante entender que no son lo mismo y que tienen propósitos y características distintas. A continuación, se detalla la diferencia entre ambas.
List: La Interfaz
List es una interfaz en el framework de colecciones de Java, que define una estructura de datos que puede contener elementos en un orden específico, permite duplicados y ofrece métodos para acceder, modificar y eliminar elementos.
Al ser una interfaz, List no puede ser instanciada directamente. En su lugar, se utilizan clases concretas que implementan List, como ArrayList, LinkedList, y Vector.
List:
List es una interfaz genérica, lo que significa que puedes definir el tipo de elementos que almacenará.
List, puedes asignarle cualquier implementación de List (como ArrayList o LinkedList), lo que permite flexibilidad y facilita el cambio de la implementación subyacente.
Ejemplo de declaración de una List:
List<String> miLista = new ArrayList<>();
ArrayList: La Implementación
ArrayList es una clase que implementa la interfaz List. Se basa en un array dinámico, lo que significa que puede cambiar de tamaño automáticamente a medida que se añaden o eliminan elementos.
ArrayList:
ArrayList maneja automáticamente la capacidad interna del array, expandiéndolo según sea necesario.
Ejemplo de uso de un ArrayList:
ArrayList<String> miArrayList = new ArrayList<>();
miArrayList.add("Elemento 1");
miArrayList.add("Elemento 2");
1. Tipo: List es una interfaz, mientras que ArrayList es una implementación concreta de esa interfaz.
2. Instanciación: No puedes crear una instancia de List directamente, pero puedes crear una instancia de ArrayList.
3. Flexibilidad: Al usar List como tipo de variable, puedes cambiar fácilmente entre diferentes implementaciones (ArrayList, LinkedList, etc.) sin modificar el código que utiliza esa lista.
1. Uso Polimórfico de List:
List<Integer> numeros = new ArrayList<>();
numeros.add(1);
numeros.add(2);
2. Cambio de Implementación:
List<String> nombres = new LinkedList<>();
nombres.add("Ana");
nombres.add("Luis");
Aquí, al cambiar la implementación a LinkedList, el código que utiliza nombres no necesita modificaciones.
Jorge García
Fullstack developer