"Down casting" isn't a good idea as you shouldn't need to use any ArrayList specific methods. You should be able to use List
for every thing. The only public methods ArrayList provides which are not in List are ensureCapacity
(which isn't as useful as it looks) and trimToSize
which is rarely useful.
In terms of cost, it depends on whether you are likely to fail to down cast. If you are not throwing exceptions, a typical type check might take ~ 40 nano-seconds. Upcast should be optimised away by the JIT.