Diferença entre ArrayList e LinkedList

Estou estudando a parte de Collection do livro Java Como Programar 4.

No livro ficou meio no ar a diferença entre ArrayList e LinkedList. Sei que as duas tem a interface List, que implementa a interface Collection.

No livro deixou bem claro a diferença entre ArrayList e Vector, já que ArrayList não é syncronized e por isso o desempenho é mais rápido.

Agora em relação a ArrayList e LinkedList ficou vago a diferença entre eles.

Alguem poderia me dizer qual a diferença entre os dois?

Obrigado

ArrayList implementa a interface List usando um array, provavelmente um Object[].
LinkedList usa uma lista-ligada para implementar List.

Na dúvida sobre oque uma lista-ligada venha a ser, consulte qualquer livro elementar de estruturas de dados.

Quanto a qual usar depende das caracteristicas do teu programa:

-Insere e remove somente do final da lista? ArrayList
-Usa acesso aleatorico, List.get(i)? ArrayList
-Insere e remove do começo e do meio da lista? LinkedList
-Precisa usar o menos possivel de memoria? ArrayList

“Subjetivando” a resposta, a LinkedList organiza automaticamente a lista no caso você inserir um valor em uma posição que não seja no final da lista (ou seja, usando o add() do ArrayList, o valor adicionado vai para o final, enquanto no LinkedList, você pode escolher a posição para o novo item). Estou certo?

Não, você está errado. E errado em dobro, pois não deveria ter desenterrado um tópico de quase 10 anos.

não tenho direito de ter a mesma dúvida que alguém teve a 10 anos? Beleza então!

Claro que sim, mas com certeza você deve usar a busca do fórum, pois sua dúvida está respondida em vários tópicos do GUJ.

Um exemplo:

Você também poderia criar uma pergunta no novo GUJ Respostas.

Como você não disse o que pesquisou pra sanar sua dúvida, assumi que não pesquisou nada.

Ah! Dê uma olhada no How To também:

Só acho que se não é pra ser respondido um tópico deveria no mínimo estar “fechado” como em qualquer outro fórum.

Já achei o que precisava, obrigado pela “gentileza”.

A interface List indica que tanto ArrayList quanto o LinkedList podem inserir, normalmente no final, ou em qualquer local arbitrário.

A diferença entre os dois nesse caso de inserção, é que o ArrayList pode precisar de um tempo a mais para expandir o seu espaço interno e/ou mover os elementos de lugar para comportar novos elementos. O LinkedList por outro lado, pode demorar mais que o ArrayList para criar um nó e ligar aos nós adjacentes, fora o seek que é bem mais lento também.

LinkedList também pode ser usada como uma Deque, com operações FIFO para ambos os lados, ou com uma Stack, com operações LIFO, apesar que a ArrayDeque pode ser mais rápida que ela em ambas as situações.