für jede Schleife vs. Iterator: Effizienz in der Sammlung traversal
Einführung
beim Durchlaufen einer Sammlung in Java, die Auswahl an der Auswahl, und die Auswahl, die auf eine Auswahl und eine Auswahl eingesetzt werden. In diesem Artikel wird die Effizienzunterschiede zwischen diesen beiden Ansätzen untersucht.
for-each loop
in Java 5 eingeführt, ist die For-Each-Schleife (auch als erweiterte für die Loop bekannt) ein konkretes und leicht zu ladetes Syntax für Iterating-über-über-Kollektionen. Es verwendet den Iterator intern:
Lista = new ArrayList(); for (Integer integer : a) { integer.toString(); }
iterator
Ein Iterator stellt eine standardisierte Schnittstelle zum Iterieren über Sammlungen an. Es ermöglicht eine benutzerdefinierte Kontrolle über den Traversalprozess.
Lista = new ArrayList(); for (Iterator iterator = a.iterator(); iterator.hasNext();) { Integer integer = iterator.next(); integer.toString(); }
Effizienzvergleich
Für einfachen schreibgeschützten Zugriff auf eine Sammlung gibt es praktisch keinen Leistungsunterschied zwischen dem For-Each-Schleifen und dem Iterator-Ansatz. Die For-Each-Schleife verwendet intern den Iterator-Mechanismus.
, wenn die traditionelle "C-Stil" -Sloop mit Get (i) verwendet wird:
for (int i = 0; iDer Iteratoransatz (sowohl für die ECH-ECHSCHAFT als auch für explizite Iterator) kann für bestimmte Datenstrukturen erheblich effizienter sein. In einer verknüpften Liste ist GET (i) beispielsweise eine O (N) -Operation. Unter Verwendung der O-Operation eines Iterators sorgt die Schleife in o (n) Zeit, während die Get (i) -Schichtung in o (n 2 ) Zeit ausgeführt wird. Bytecode für beide Ansätze:
for-each loop
liste
a = new ArrayList (); für (Ganzzahl Integer: a) { Integer.toString (); } aload 1 InvokeInterface java/util/list.iterator () ljava/util/iterator; Astore 3 ...
iteratorLista = new ArrayList(); for (Integer integer : a) { integer.toString(); } ALOAD 1 INVOKEINTERFACE java/util/List.iterator()Ljava/util/Iterator; ASTORE 3 ...aload 1 InvokeInterface java/util/list.iterator () ljava/util/iterator; Astore 2 ... Wie Sie beobachten können, ist der generierte Bytecode identisch und weist keine Leistungsstrafe bei der Verwendung eines Ansatzes an.
Listschlussfolgerunga = new ArrayList(); for (Integer integer : a) { integer.toString(); } Lista = new ArrayList(); for (Integer integer : a) { integer.toString(); } , wenn eine Sammlung eine Sammlung für minimaler Zugang zu einem minimalen Unterschied zwischen dem Unterschied zwischen einem minimalen Unterschied ist. Der Iterator bietet nur Vorteile, wenn sie mit bestimmten Datenstrukturen arbeiten oder ein benutzerdefiniertes Iterationsverhalten benötigt. Die Einfachheit und Lesbarkeit ist die For-Each-Schleife im Allgemeinen die bevorzugte Wahl.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3