
Una lista es una agrupación lineal de elementos, que pueden duplicarse. A una lista se añaden elementos por la cabeza, por el final, en general por cualquier punto. También, se permite eliminar elementos de uno en uno, o bien todos aquellos que estén en una colección.
Hay dos tipos de listas, las secuenciales y las enlazadas. El concepto general de lista está representado por la interfaz List; esta interfaz es la raíz de la jerarquía y por conversión automática toda colección de tipo lista se puede tratar con una variable de tipo List.
Ejemplo
List lista;
lista = new ArrayList();
lista = new LinkedList();
La jerarquía de listas se muestra en la siguiente figura. Java 2 ha modificado las clases históricas Vector y Stack para ubicarlas en esta jerarquía, mantienen la funcionalidad histórica y, además, la funcionalidad heredada de la clase AbstractList.
Jerarquía de colecciones List.

AbstractList es una clase abstracta que se utiliza como esqueleto para implementar clases concretas con la característica de acceso aleatorio a los elementos, como un arreglo. Esto quiere decir que se puede acceder a un elemento por un índice. Una clase que derive de esta debe implementar los métodos get(int indice), size(), y además, si va a realizar cambios, set(), add() y remove(); los métodos iterator(), listIterator(), indexOf() están definidos por esta clase. La clase ArrayList es una clase concreta que deriva de AbstractList; se utiliza para almacenar cualquier tipo de elementos, incluso está recomendado su uso en lugar de Vector. (Ver Vector y Stack)
ArrayList
Esta clase agrupa elementos como un arreglo. Es equivalente a Vector, pero con las mejoras introducidas por Java 2. Se puede acceder a cualquier elemento, insertar o borrar a partir del índice en cualquier posición, aunque un tanto ineficiente si se realiza en posiciones intermedias. La clase ArrayList tiene tres constructores:
public ArrayList();
public ArrayList(int capacidad);
public ArrayList(Collection c);
Por ejemplo, se crea una colección con los elementos de un vector:
Vector v = new Vector();
ArrayList al = new ArrayList(v);
La clase ArrayList implementa los métodos de la interfaz List, también el método clone() de la interfaz Cloneable para poder crear una copia independiente de la colección.
Ejemplo
Se realizan las operaciones de añadir, eliminar, buscar y reemplazar con una colección de tipo ArrayList. La colección va a estar formada por cadenas (String) leídas del teclado. Una vez formada la colección es eliminada una cadena concreta y se reemplaza el elemento que ocupa la posición central. Para realizar una búsqueda se utiliza el método indexOf() que devuelve la posición que ocupa, o bien -1; a partir de esta posición se crea un iterador llamando al método iterator() con el fin de recorrer y, a la vez, escribir los elementos.
import java.util.*;
public class ListaArray {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
List av = new ArrayList();
String cd;
System.out.println(«Datos de entrada (adios para acabar)»);
try{
do{
cd = entrada.nextLine();
if(!cd.equalsIgnoreCase(«adios»))
av.add(cd);
else break;
}while(true);
System.out.println(«Lista completa: » + av);
// elimina una palabra
System.out.println(«Palabra a eliminar: «);
cd = entrada.nextLine();
if(av.remove(cd))
System.out.println(«Palabra borrada, lista actual: » + av);
else
System.out.println(«No esta en la lista la palabra»);
// reemplaza elemento que está en el centro
av.set(av.size()/2, «NuevaCadena»);
System.out.println(«Lista completa: » + av);
// busqueda de una palabra
System.out.println(«Búsqueda de una palabra: «);
cd = entrada.nextLine();
int k = av.indexOf(cd);
// crea iterador y recorre la lista hacia adelante
if(k>=0){
System.out.println(«Recorre la lista»);
Iterator ls = av.iterator();
while(ls.hasNext()){
System.out.print((String)ls.next() + » «);
}
}
}catch(Exception e) {;}
}
}