Junior — Middle
Ao usar coleções, em que casos a iteração é mais rápida: em ArrayList ou em LinkedList?
sobes.tech IA
Resposta da IA
A iteração de elementos nas coleções ArrayList e LinkedList em Java difere em desempenho devido à sua estrutura interna.
- ArrayList baseia-se numa matriz, pelo que o acesso a um elemento por índice ocorre em tempo O(1). A iteração usando um ciclo for com índices é muito rápida.
- LinkedList é uma lista duplamente ligada, onde o acesso a um elemento por índice requer percorrer a lista desde o início ou o fim, o que leva O(n) de tempo.
Portanto, percorrer todos os elementos usando um iterador ou um ciclo foreach é aproximadamente igual para ambas as coleções, mas se a iteração for feita usando índices (por exemplo, get(i) num ciclo), então o ArrayList será significativamente mais rápido.
Exemplo:
ArrayList<String> arrayList = new ArrayList<>();
LinkedList<String> linkedList = new LinkedList<>();
// preenchimento das listas
// Percurso rápido no ArrayList
for (int i = 0; i < arrayList.size(); i++) {
String item = arrayList.get(i); // O(1)
}
// Percurso lento na LinkedList usando índices
for (int i = 0; i < linkedList.size(); i++) {
String item = linkedList.get(i); // O(n)
}
// Recomenda-se usar um iterador ou foreach para a LinkedList
for (String item : linkedList) {
// processamento do elemento
}
Assim, a iteração é mais rápida no ArrayList, especialmente se for necessário acesso por índice.