"Que tal um pouco de treinamento para o seu cérebro? Espero que ainda esteja funcionando."

"Anteriormente, na tabela de contêineres e coleções, você viu que uma mesma interface pode ter várias implementações. Agora vou dizer por que precisamos disso. E como ArrayList difere de LinkedList ."

"O problema é que as coleções podem ser implementadas de maneiras diferentes e nenhuma implementação é sempre ideal. Em uma abordagem, algumas operações são rápidas, mas outras são lentas. O oposto pode ser verdadeiro para outra abordagem. Não existe um tamanho único perfeito solução para tudo."

"É por isso que foi tomada a decisão de implementar várias versões da mesma coleção. Cada implementação deve ser otimizada para um conjunto restrito de operações. É assim que coleções diferentes surgiram. Vamos estudar duas classes como exemplos: ArrayList e LinkedList ."

ArrayList vs. LinkedList - 1

"Internamente, ArrayList é implementado como um array comum . É por isso que inserir um elemento no meio exige que primeiro desloquemos todos os elementos subsequentes em um e, em seguida, coloquemos o novo elemento no espaço livre. Obtendo e configurando elementos (obter, definir ) é rápido , pois essas operações simplesmente abordam o elemento relevante da matriz."

" LinkedList tem uma estrutura interna diferente. É implementado como uma lista com elementos interconectados : um conjunto de elementos distintos, cada um dos quais armazena referências aos elementos seguintes e anteriores na lista. Para inserir um elemento no meio de tal lista, você só precisa alterar as referências de seus futuros vizinhos. No entanto, para obter o elemento nº 130, você deve percorrer cada objeto de 0 a 130. Em outras palavras, as operações get e set serão lentas . Veja a tabela a seguir :"

Descrição Operação ArrayList LinkedList
Obter um elemento pegar Rápido Lento
Definir um elemento definir Rápido Lento
Adicionar um elemento (no final da lista) adicionar Rápido Rápido
Inserir um elemento (em uma posição arbitrária) add(i, valor) Lento Rápido
Remover um elemento remover Lento Rápido

"Entendo. Estou começando a entender agora. Existe algum critério ou regra que me ajude a saber qual coleção é melhor em uma situação particular?"

"Para simplificar, darei a seguinte regra: se você for inserir (ou remover) elementos com frequência no meio da coleção, é melhor usar LinkedList . Em todos os outros casos, ArrayList funciona melhor."

"Vamos nos aprofundar em como eles são estruturados em lições mais avançadas, mas por enquanto vamos apenas praticar o uso deles."