Semplicemente List e' una "interfaccia", ossia definisce i metodi che deve avere una classe per essere una lista, mentre ArrayList è una implementazione delle liste basate su array.