Diferença entre ArrayList e LinkedList em Java
Contente
ArrayList e LinkedList são os Coleção classes, e ambas implementam o Lista interface. A classe ArrayList cria a lista que é armazenada internamente em um dinâmico matriz que cresce ou diminui de tamanho à medida que os elementos são adicionados ou excluídos dele. O LinkedList também cria a lista que é armazenada internamente em um Duplamente Ligado Lista. Ambas as classes são usadas para armazenar os elementos na lista, mas a principal diferença entre as classes ArrayList e LinkedList é que ArrayList permite acesso aleatório aos elementos da lista, pois opera em um baseado em índice estrutura de dados. Por outro lado, o LinkedList não permite acesso aleatório, pois não possui índices para acessar elementos diretamente, precisa percorrer a lista para recuperar ou acessar um elemento da lista.
Vamos discutir mais algumas diferenças entre ArrayList e LinkedList com a ajuda do gráfico de comparação mostrado abaixo.
- Gráfico de comparação
- Definição
- Principais diferenças
- Conclusão
Gráfico de comparação
Base para Comparação | ArrayList | LinkedList |
---|---|---|
Basic | ArrayList permite acesso aleatório aos elementos da lista. | O LinkedList não permite acesso aleatório aos elementos da lista. |
Estrutura de dados | A estrutura interna usada para armazenar elementos é a matriz dinâmica. | A estrutura interna usada para armazenar elementos é duplamente lista de links. |
Estende | ArrayList estende a classe AbstarctList. | LinkedList estende AbstractSequentialList. |
Implementos | AbstractList implementa a interface de lista. | O LinkedList implementa List, Deque, Queue. |
Acesso | O acesso aos elementos da lista é mais rápido no ArrayList. | O acesso aos elementos da lista é mais lento no LinkedList. |
Manipulação | A manipulação de elementos na lista é mais lenta em ArrayList. | A manipulação de elementos na lista é mais rápida no LinkedList. |
Comportamento | ArraylList se comporta como Lista, à medida que implementa a lista. | O LinkedList se comporta como Lista e Fila, pois implementa Lista e Fila. |
Definição de ArrayList
o AbstractList classe é definida pelo Estrutura da coleção. Estende AbstarctList e implementa Lista interface. ArrayList usa matriz dinâmica ou seja, a matriz de comprimento variável como uma estrutura de dados interna para armazenar os elementos na lista. A necessidade de ArrayList surge como a matriz em java é de comprimento fixo. Portanto, não pode aumentar ou diminuir de tamanho à medida que os elementos são adicionados ou excluídos da matriz. Então você precisa conhecer o tamanho da matriz necessária com antecedência. Mas a lista de matrizes implementada usando a classe ArrayList pode aumentar e diminuir em tamanho à medida que os elementos são adicionados ou excluídos da matriz.
A lista de matrizes implementada usando ArrayList pode ser acessada aleatoriamente como ArrayList opera com base no índice. Portanto, conhecendo o índice, você pode acessar diretamente o elemento da lista. Existem três construtores de ArrayList:
ArrayList () ArrayList (Collection <? Extends E> c) ArrayList (capacidade int)
o primeiro O construtor implementa uma lista de matrizes vazia. o segundo O construtor implementa uma lista de matrizes inicializada usando o método Coleção c elementos. o terceiro construtor implementa lista de matrizes com o capacidade fornecido no argumento. Trabalhando com o ArrayList, às vezes você precisará converter o Collection ArrayList em uma matriz. Isso pode ser feito chamando toArray ().
Definição de LinkedList
Como ArrayList, LinkedList também é um Coleção classe usa lista duplamente vinculada como uma estrutura de dados interna para armazenar os elementos na lista. A classe LinkedList estende AbstractSequentialList e implementa o Lista, Deque e Fila interfaces. A lista vinculada implementada usando o LinkedList não pode ser acessada aleatoriamente. Se você deseja recuperar qualquer elemento da lista, é necessário iterar a lista para pesquisar esse elemento.
Existem dois construtores na classe LinkedList.
LinkedList () LinkedList (Collection <? Extends E> c)
o primeiro O construtor cria uma lista vinculada vazia. o segundo O construtor cria uma lista vinculada, inicializada com os elementos de Coleção c.
No LinkedList, a manipulação da lista é fácil e rápida. Isso ocorre porque se você adicionar ou excluir qualquer elemento da lista, não será necessário alterar os elementos como em ArrayList. Mas o acesso é mais lento, pois não possui índice para acessar diretamente os elementos.
- A lista implementada pelo ArrayList pode ser acessada aleatoriamente porque o ArrayList adota a estrutura de dados baseada em índice da matriz. Por outro lado, a lista implementada pelo LinkedList não pode ser acessada aleatoriamente porque, para recuperar ou acessar um elemento específico da lista, é necessário percorrer a lista.
- A estrutura de dados interna usada pelo ArrayList para armazenar os elementos da lista é um matriz dinâmica que podem aumentar ou diminuir à medida que os elementos são adicionados ou excluídos da lista. No entanto, a estrutura de dados interna usada pelo LinkedList para armazenar os elementos na lista é lista duplamente vinculada.
- O ArrayList estende o AbstractList classe que também é uma classe Collection, enquanto que a classe LinkedList estende AbstractSequentialList classe que é novamente uma classe Collection.
- A classe ArrayList implementa Lista interface, enquanto que a classe LinkedList implementa Lista, Filae Deque interfaces.
- O acesso a elementos da lista implementada usando ArrayList é Mais rápido pois possui uma estrutura de dados baseada em índice. Por outro lado, não existe uma estrutura baseada em índice na lista implementada porLinkledList. Portanto, um iterador é aplicado sobre a lista para alcançar o elemento a ser acessado, o que torna o acesso Mais devagar no LinkedList.
- Manipulation é Manipulation na lista implementada usando ArrayList, porque sempre que um elemento é adicionado ou excluído da lista, os elementos da lista são deslocados para acomodar a alteração. Por outro lado, a manipulação é mais rápida na lista implementada pelo LinkedList, pois não requer elementos de mudança na lista na adição ou exclusão dos elementos da lista.
- ArrayList age como um Lista implementa a interface List, enquanto o LinkedList atua como Lista e fila como ele implementa lista e fila.
Conclusão:
Quando há uma adição ou exclusão freqüente dos elementos na lista, o LinkedList deve ser usado, pois ele apresenta melhor desempenho durante a manipulação. Se a pesquisa frequente for aplicada à lista, o ArrayList é a melhor opção, pois apresenta melhor desempenho ao acessar elementos da lista.