ArrayList vs LinkedList

3 respostas
Bruno_Cardoso1

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.

3 Respostas

TheMask
Pontos:

:arrow: Usei (quase) o mesmo código que você;

:arrow: Adicionei alguns testes que evidenciam as diferenças (deve ser auto-explicativo);

:arrow: O insert into last position da LinkedList não está otimizado (veja o insert initial/middle);

:arrow: Em geral, com ArrayList você tem mais chances de cobrir tuas necessidades. Se desempenho for um problema (após você ter medido e ter certeza de que precisa melhorar), entenda as características da tua coleção e escolha uma implementação mais eficiente;

:arrow: Um bom livro de estrutura de dados, um famoso livro do Joshua Block, um artigo do Osvaldo Doederlein em uma edição da JavaMagazine e um bocado de Google vão te ajudar enormemente (exatamente nesta ordem);

Lá vai meu código (é o teu com algumas pequenas alterações).

LPJava

na iteracao, o LinkedList concerteza é melhor que o ArrayList pois o acesso é por ordem de inserção, você nao pode chegar no LinkedList e dizer que vai inserir o cara na posicao 3, mais no ArrayList sim…o acesso no LinkedList é sequencial… e o resultado é garantido… ao contrario do ArrayList por ter uma iteracao aleatoria…

E

LPJava
você nao pode chegar no LinkedList e dizer que vai inserir o cara na posicao 3

pq nao dá pra fazer isso?

Criado 13 de maio de 2007
Ultima resposta 12 de set. de 2012
Respostas 3
Participantes 4