This is how most developers use ArrayList (myself included), and is a general tenet of polymorphism. You should use the highest class/interface in the class hierarchy that you can while still having all your functionality available.
Generally, this makes your code more flexible, and you can switch out implementations more easily since you know that programming with List as the type hasn't bound you to using any methods that are only on ArrayList and not available on, say, a LinkedList.
For example, if I did:
LinkedList<String> strings = new LinkedList<String>();
String s = strings.pop();
pop is exclusive to LinkedList, so I can't just change it directly to an ArrayList. I'd have to also change my code:
ArrayList<String> strings = new ArrayList<String>();
String s = strings.remove(strings.size() - 1);
But if I had just used the interface, I would've never used pop in the first place, so I could've just changed strings to whatever implementation I wanted.
This is especially important when programming APIs. If your methods are publicly accessible and will be used by other developers, then you need to make sure that you aren't restricting what kind of lists your methods take unless you have a good reason for doing so, especially since they may have a good reason for not wanting to use ArrayList.
If you're doing nothing but iteration and adding/removing, you could even go up to Collection. Here you start to lose context though, since List tells you it may contain duplicates and is ordered manually. But if this isn't particularly important and you can use Collection, you can even replace the lists with implementations of Set.