"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 ."

"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."
GO TO FULL VERSION