`ArrayList` is the fastest `List` implementation for access to individual elements (retrieval or update) - constant-time access - but the worst for resizing (order(N)). `LinkedList` is fastest for adding to or removing from either end, but order(N) performance for access.
To add to what Nick said, the capacity and size of a List are different things, so you can make the capacity larger than the size to reduce resizing. If you use ArrayList, you want to be aware of this because its default size is 10, IIRC!
Linked list is bad for random access, but does fine with iteration. (Comparable to ArrayList)
All of this depends on your use. I'd also read up on implementing Comparator and how that works with sorted sets/maps. The other key thing to understand is hashcode() and equals() and how they function in collections.