Heim > Java > javaLernprogramm > Hauptteil

For-each-Schleife oder Iterator: Was ist effizienter für die Sammlungsdurchquerung?

DDD
Freigeben: 2024-11-25 15:24:10
Original
963 Leute haben es durchsucht

  For-each Loop or Iterator: Which is More Efficient for Collection Traversal?

Erweiterte for-Schleife oder Iterator: Bewertung der Schleifeneffizienz

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();
}
Nach dem Login kopieren

Iterator:

List<Integer> a = new ArrayList<>();
for (Iterator iterator = a.iterator(); iterator.hasNext();) {
  Integer integer = (Integer) iterator.next();
  integer.toString();
}
Nach dem Login kopieren

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:

  • Entscheiden Sie sich entweder für eine for-each-Schleife oder einen Iterator when ausschließlich durch eine Sammlung iterieren.
  • Bevorzugen Sie die for-each-Schleife wegen ihrer Prägnanz und Lesbarkeit, es sei denn, Effizienz ist von größter Bedeutung.
  • Seien Sie sich der potenziellen Leistungsnachteile herkömmlicher Schleifen im C-Stil in bestimmten Szenarien bewusst mit get(i).

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage