Listas en java

La interface List define métodos para operar con colecciones ordenadas y que pueden tener elementos repetidos. Por ello, dicha interface declara métodos adicionales que tienen que ver con el orden y con el acceso a elementos o rangos de elementos. Además de los métodos de Collection, la interface List declara los métodos siguientes:

Compiled from List.java
public interface java.util.List extends java.util.Collection
{
public abstract void add(int, java.lang.Object);
public abstract boolean addAll(int, java.util.Collection); public abstract java.lang.Object get(int);
public abstract int indexOf(java.lang.Object); public abstract int lastIndexOf(java.lang.Object);
public abstract java.util.ListIterator listIterator(); public abstract java.util.ListIterator listIterator(int); public abstract java.lang.Object remove(int);
public abstract java.lang.Object set(int, java.lang.Object); public abstract java.util.List subList(int, int);
}

Los nuevos métodos add() y addAll() tienen un argumento adicional para insertar elementos en una posición determinada, desplazando el elemento que estaba en esa posición y los siguientes.

Los métodos get() y set() permiten obtener y cambiar el elemento en una posición dada. Los métodos indexOf() y lastIndexOf() permiten saber la posición de la primera o la última vez que un elemento aparece en la lista; si el elemento no se encuentra se devuelve –1.

El método subList(int fromIndex, toIndex) devuelve una “vista” de la lista, desde el elemento fromIndex inclusive hasta el toIndex exclusive. Un cambio en esta “vista” se refleja en la lista original, aunque no conviene hacer cambios simultáneamente en ambas. Lo mejor es eliminar la “vista” cuando ya no se necesita.

Existen dos implementaciones de la interface List, que son las clases ArrayList y LinkedList. La diferencia está en que la primera almacena los elementos de la colección en un array de Objects, mientras que la segunda los almacena en una lista vinculada.

Los arrays proporcionan una forma de acceder a los elementos mucho más eficiente que las listas vinculadas. Sin embargo tienen dificultades para crecer (hay que reservar memoria nueva, copiar los elementos del array antiguo y liberar la memoria) y para insertar y/o borrar elementos (hay que desplazar en un sentido u en otro los elementos que están detrás del elemento borrado o insertado).

Las listas vinculadas sólo permiten acceso secuencial, pero tienen una gran flexibilidad para crecer, para borrar y para insertar elementos. El optar por una implementación u otra depende del caso concreto de que se trate.

Fuente: Aprenda Java como si estuviera en primero de la Universidad de Navarra