Frage:
Was ist beim Navigieren in einer Sammlung? Effektivster Ansatz: eine for-each-Schleife oder eine Iterator?
Codeausschnitte:
Für-jeden Schleife:
List<Integer> a = new ArrayList<>(); for (Integer integer : a) { integer.toString(); }
Iterator:
List<Integer> a = new ArrayList<>(); for (Iterator iterator = a.iterator(); iterator.hasNext();) { Integer integer = (Integer) iterator.next(); integer.toString(); }
Auswertung:
1. Sammlungswerte lesen:
Beim einfachen Durchlaufen einer Sammlung, um auf Werte zuzugreifen, haben Iteratoren und for-each-Schleifen die gleiche Effizienz, da die for-each-Schleife intern Iteratoren verwendet.
2. Schleifen im C-Stil vs. Iteratoren:
Im Gegensatz zu Iteratoren und for-each-Schleifen können herkömmliche Schleifen im „C-Stil“, die über get(i) auf Elemente zugreifen, Leistungseinbußen aufweisen. Get(i) hat eine O(n)-Komplexität für bestimmte Datenstrukturen, wie z. B. verknüpfte Listen, was zu einer Gesamtkomplexität von O(n2) Zeit für die Schleife führt.
3. Iteratoreffizienz:
Iteratoren garantieren O(1) Zeitkomplexität für next() und rendern Schleifen O(n).
4. Bytecode-Vergleich:
Die Untersuchung des generierten Bytecodes für for-each-Schleifen und Iteratoren zeigt, dass sie praktisch nicht unterscheidbar sind, was auf keinen intrinsischen Leistungsunterschied hinweist.
Schlussfolgerung:
Das obige ist der detaillierte Inhalt vonFor-each-Schleife oder Iterator: Was ist effizienter für die Sammlungsdurchquerung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!