¿Cuál es la diferencia entre List y ArrayList?

He estado utilizando ArrayList recientemente en mi proyecto de Android en la oficina y estoy un poco confundido entre List y ArrayList, ¿cuál es la diferencia de los dos y qué debería usar?

También vi algunas implementaciones de este estilo.

List myList = new ArrayList(); ArrayList myList = new ArrayList(); 

¿Cuál es la diferencia de esas dos instancias?

No hay diferencia entre las implementaciones de listas en sus dos ejemplos. Sin embargo, existe una diferencia en la forma en que puede utilizar aún más la variable myList en su código.

Cuando defines tu lista como:

 List myList = new ArrayList(); 

solo puede llamar a los métodos y a los miembros de referencia que están definidos en la interfaz de la Lista. Si lo defines como:

 ArrayList myList = new ArrayList(); 

podrá invocar métodos específicos de ArrayList y usar miembros específicos de ArrayList además de aquellos cuyas definiciones se heredan de List.

Sin embargo, cuando llama a un método de una interfaz de lista en el primer ejemplo, que se implementó en ArrayList, se llamará al método de ArrayList (porque la interfaz de lista no implementa ningún método).

Eso se llama polymorphism. Puedes leer sobre esto.