List è un interfaccia e definisce un contratto per un qualsiasi tipo di lista. Contratto nel senso che essa ti dice che metodi deve avere una lista: l'implementazione è demandata al programmatore. In questo modo è possibile definire liste di tipo diverso che comunque sono intercambiabili.

Ad esempio, dato questo metodo:

codice:
public void foo(List list) { 
    list.add("1");
    list.add("2");
    list.add("3");
}
tu puoi fare sia

codice:
ArrayList arrayList = new ArrayList();
foo(arrayList);
che

codice:
LinkedList linkedList = new LinkedList();
foo(linkedList);

Questo permette un alto disaccopiamento del codice, rendendolo più modulare e riutilizzabile.