Коротко

Обе реализуют List, но устроены по-разному:

ArrayList LinkedList
Структура динамический массив двусвязный список
get(i) O(1) O(n)
add в конец амортизированно O(1) O(1)
insert в середину O(n) сдвиг O(n) поиск + O(1) вставка

Практика

В реальных задачах ArrayList почти всегда default: лучше locality, быстрее доступ по индексу. LinkedList редко выигрывает на практике.

Короткий ответ

«ArrayList — массив, быстрый индекс. LinkedList — узлы, удобнее точечные вставки после нахождения узла, но на практике чаще ArrayList.»