If you use List you will be able to call the methods available in the List interface and you cannot make calls to the new methods available in the ArrayList class. Where as, you are free to use all the methods available in the ArrayList if you use the second one.
The ArrayListclass has only a few methods(i.e clone(), trimToSize(), removeRange() and ensureCapacity()) in addition to the methods available in the List interface.
I would suggest you to use List<Integer> list = new ArrayList<Integer>(); so that if in future you want to change the implementation for any performance constraint, you can do it easily. You need to change at one point only(the instantiation part) List<Integer> list = new LinkedList<Integer>(); Else you will be supposed to change at all the places, wherever, you have used the specific class implementation as method arguments.