ArrayList internally made of an array. LinkedList is a doubly-linked list.
When to use?
Searching using an index: Use ArrayList, the time complexity is O(1)
Adding/removing elements: Use LinkedList since only pointer values are to be changed. The time complexity is O(1). The ArrayList has to shifts the other elements.