Para mim ficou muito vago quando optar por ArrayList ou LinkedList. Poderia esclarecer?
Para mim ficou muito vago quando optar por ArrayList ou LinkedList. Poderia esclarecer?
Olá Maurício, tudo bem com você?
Basicamente, quando você tiver um caso onde será preciso inserir ou remover elementos de uma lista frequentemente, o LinkedList
pode ser uma boa escolha já que ele sempre leva o mesmo tempo para inserir um elemento na lista, independente da posição que escolhemos. Já o ArrayList
é ideal para quando precisamos recuperar ou alterar dados da lista com frequência já que, diferente do LinkedList
que precisa percorrer a lista inteira desde o primeiro elemento até encontrar o elemento que buscamos, o ArrayList
consegue acessar um elemento aleatório da lista diretamente sem precisar percorrer a lista.
Na maioria dos casos, você vai acabar utilizando o ArrayList
por conta da performance que ele tem durante a iteração das listas. Mas é bom ficar atento, pois caso o ArrayList
chegue à sua capacidade máxima que, por padrão, é 10. Ele precisará ser redimensionado, criando uma nova ArrayList
com 150% de seu tamanho anterior e copiando todos os elementos da lista antiga para essa nova. Portanto, caso você tenha uma noção de quantos elementos a ArrayList
irá armazenar, é recomendado que você defina um tamanho inicial para a ArrayList
maior do que 10. Algo como List<Integer> list = new ArrayList<>(100);
.
Espero que isso ajude. Existem muito mais detalhes relacionados a implementação dessas listas, mas na prática, esses são os pontos que você deve se atentar na hora de escolher qual implementação utilizar.
Qualquer dúvida é só avisar. Forte abraço e bons estudos!!
É que a mim parece que tanto a inserção/remoção de elementos quanto o acesso direto a determinado item da lista são frequentes em listas. Não consigo imaginar uma aplicação que use listas que não seja necessário as duas tarefas
Opa Maurício, tranquilo? Por isso é uma questão de eficiência e qual operação será usada com mais frequência, mas cada caso é um caso. Então, dependendo do tamanho da lista, nem o LinkedList
será tão útil, apesar de teoricamente ele ser melhor para inserir e remover elementos. Na dúvida, sempre use o ArrayList
já que ele dá conta da grande maioria dos casos. LinkedList
seria algo para casos mais específicos, principalmente quando precisamos adicionar e remover com frequência.