Viva,
Li neste link que as ArrayList eram boas para acessos aleatórios desde que não se queira inserir ou apagar elementos de qualquer posição a não ser do fim da lista e que por outro lado a LinkedList era optima se quisesse inserir e apagar elementos do meio da lista e fosse apenas percorre-la sequencialmente.
O problema é que fiz uma class para testar isto e não está a bater certo com o que é dito em cima. A LinkedList perde em todos os casos menos na iteração sequencial da lista, mas mesmo aí a diferença é muito pouca tendo em conta que é uma lista bastante grande.
Será que estou a fazer algo de errado? Qual é a vantagem da LinkedList afinal?
Ficam aqui os resultados:
Test with a list of 1000000 positions
List type: java.util.LinkedList
Accessing 1000 random positions: 27550ms
Remove 1000 random positions: 28231ms
Insert 1000 objects into random positions: 27719ms
Remove 1000 objects from the last position: 0ms
Read all 999000 objects sequentially: 190ms
Test with a list of 1000000 positions
List type: java.util.ArrayList
Accessing 1000 random positions: 10ms
Remove 1000 random positions: 2754ms
Insert 1000 objects into random positions: 2874ms
Remove 1000 objects from the last position: 0ms
Read all 999000 objects sequentially: 150ms
Se quiserem podem fazer o download aqui do código fonte que usei para testar isto.