Mamy liste:
List<Integer> numbers = new LinkedList<>(Arrays.asList(1,2,3,4));
W związku z tym, że jest to kolekcja LinkedList złożoność w dostępie do
pojedyńczego elementu to O(n)
.
Doszedłem więc do wniosku, że:
// bardziej optymalne
for (Integer n: numbers) {
System.out.println(n);
}
// mniej optymalne
for (int i=0; i<numbers.size(); ++i) {
System.out.println(numbers.get(i));
}
Drugi wariant (verbose) w moim mniemaniu jest mniej optymalny
gdyż za każdym razem musi przeiterować po elementach aż
dojdzie do tego konkretnego.
Czasem widzę kod gdzie wykorzystywany jest drugi wariant po to aby
mieć indeks. Czy nie byłoby optymalniej wtedy zrobić tak?
int index = 0;
for (Integer n: numbers) {
System.out.println(n);
++index;
}
Zwłaszcza, że często nie wiemy czy pod spodem jest ArrayList
czy LinkedList bo dla tego pierwszego wariant nie miałby znaczenia
poza czytelnością.