Sobes.tech
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.