Why should the latter with List be used instead of ArrayList?
It's a good practice : Program to interface rather than implementation
By replacing ArrayList with List, you can change List implementation in future as below depending on your business use case.
List<Object> list = new  LinkedList<Object>(); 
/* Doubly-linked list implementation of the List and Deque interfaces. 
 Implements all optional list operations, and permits all elements (including null).*/
OR
List<Object> list = new  CopyOnWriteArrayList<Object>(); 
/* A thread-safe variant of ArrayList in which all mutative operations
 (add, set, and so on) are implemented by making a fresh copy of the underlying array.*/
OR
List<Object> list = new  Stack<Object>(); 
/* The Stack class represents a last-in-first-out (LIFO) stack of objects.*/
OR
some other List specific implementation. 
List interface defines contract and specific implementation of List can be changed. In this way, interface and implementation are loosely coupled. 
Related SE question:
What does it mean to "program to an interface"?