Boa Tarde Galera!
Alguém pode me explicar porque uma arrayList é mais rápida que uma linkedList quando o assunto é percorrer?
E também porque uma linkedList é mais rápida que uma arrayList quando o assunto é inserir e remover?
Desde já agradeço
Boa Tarde Galera!
Alguém pode me explicar porque uma arrayList é mais rápida que uma linkedList quando o assunto é percorrer?
E também porque uma linkedList é mais rápida que uma arrayList quando o assunto é inserir e remover?
Desde já agradeço
Isso não é verdade. Se você fizer acesso aleatório (ex: lista.get(i)), daí sim LinkedList é muito lerdo. Mas se você usar o Iterator, eles empatam.
ArrayList usa um array por baixo. Se você for inserir um elemento no meio do array, terá que empurrar todos os outros que ficam atrás uma posição. Se for retirar um elemento do meio, terá que puxar os que estão atrás uma posição. Isso é algo computacionalmente custoso.
Por outro lado, LinkedList é como se fosse uma fila de pessoas. Se alguém furar a fila na metade, quem está distante seja para frente ou para trás não percebe. Se alguém que está no meio sai da fila, o mesmo acontece.
linkedList nao usa uma array por baixo tmb? :shock: Qual a principal diferenca das duas?
Não, LinkedList não usa array. Basicamente ele tem um objeto mais ou menos assim:
[code]class No {
private No anterior;
private No proximo;
private E elemento;
// Um monte de métodos.
}
class MeuLinkedList implements List {
private No primeiro;
private int tamanho;
// Um monte de métodos.
}
[/code] Ou seja, cada elemento conhece os seus vizinhos. A lista só conhece o primeiro elemento.