Unterschied zwischen einer for-Schleife und eine while-Schleife mit Iterator
Iterator mit while-Schleife:
List<DataType> list = new ArrayList<DataType>();
Iterator<YourDataType> it = yourList.iterator();
while (it.hasNext())
//Do something
Iterator mit for-Schleife:
List<DataType> list = new ArrayList<DataType>();
for ( Iterator<DataType> it = list.iterator(); list.hasNext(); )
//Do something
Habe ich gelesen, dass die for-Schleife minimiert den Umfang der Iterator der Schleife selbst. Was genau bedeutet das? Sollte ich die for-Schleife insteed der while-Schleife?
- W. r.t. die Minimierung von Umfang, es ist (in meinem Kopf zumindest) wie mit einer lokalen variable über eine Globale variable. Kann das jemand, ob das vergleichbar ist?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Unterschied ist im Grunde
In der for-Schleife:
In diesem Fall werden Sie die Deklaration der Iterator-Objekt lokal und es wird
eligible for GC(garbage collection) after the for loop
.In der while-Schleife,
while (it.hasNext())
da haben Sie deklariert die Iterator-Objekt außerhalb einer Schleife. So seine Umfang ist kannthe entire program
oder diemethod it is in
.Oder incase, wenn es referenziert wird überall, so dass es nicht berechtigt, GC.
Hoffe, das hilft.
Weil Sie erklären der iterator innerhalb der for-Schleife, werden Sie nicht in der Lage, es in der Außenwelt. Sein Anwendungsbereich beschränkt sich auf die for-Schleife block.
Verwenden, was macht mehr Sinn in deinem Fall. Brauchst du den iterator nachdem Sie iteriert über alle Elemente in Ihrer Sammlung? Verwenden Sie eine while-Schleife. Wenn Sie nicht für es sorgen, verwenden Sie die for-Schleife.
Beachten Sie, dass, wenn die Dinge außerhalb des Bereichs, werden Sie für die garbage collection freigegeben.
Verwenden
Iterator
auf diewhile
loop, müssen Sie deklarieren und initialisieren Sie es vor nicht mit in diewhile
Schleife. Damit Sie dies tun können:In der
for
Schleife, dieIterator
erklärt werden, innerhalb des Bereichs derfor
- Schleife, so dass es kann verwendet werden, nur im Körper dieser Schleife.Dies hängt ganz von Ihren Bedürfnissen. In der Regel, wenn Sie gehen, um zu konsumieren, und alle Elemente des iterator in eine einzige Schleife, es ist besser, um die
for
loop-Ansatz, und es wird besser sein, mit Hilfe der erweitertenfor
Schleife, die bereits verwendetIterator
hinter den kulissen:In Fällen, In denen Sie nicht navigieren Sie durch alle Elemente der iterator in der Schleife, es wäre besser, verwenden
while
. Ein Beispiel HIERFÜR könnte sein, Durchführung eines merge-sort (Hinweis: dieses Beispiel ist ausschließlich für ausbildungszwecke).Als JNL sagte, mit einem begrenzten Umfang der garbage-collection sammeln können, die es direkt nach der Schleife, statt bis zum nächsten
}
.Normalerweise ist das der kleine Anliegen - einen iterator nicht wirklich viel Speicher und den Umfang der normalerweise endet ziemlich schnell nach der iterator verwendet wird. Zum Beispiel, wenn Sie Ihre code-Beispiele in einer Methode, die, Sie liefern den gleichen Umfang. Ein weiterer Weg, um den Umfang der while-Schleife fügen Sie die geschweiften Klammern um ihn herum, die als solche:
Wird dies auch eine Einschränkung des Geltungsbereichs
list
, das ist schwerer in Erinnerung als Nutzung der iterator und damit mehr relevant.TL;DR
Egal.
Gibt es zwei wichtige Unterschiede in der syntax und Wartung.
Syntax
Den Gültigkeitsbereich der Variablen ist unterschiedlich. In der
for
Fall, wird die variable nur zugänglich innerhalb der für Kopf und Körper, während in derwhile
Fall ist es nach der Schleife. Als eine Allgemeine Regel, es ist besser, haben dichtere Bereiche, weniger Variablen in-flight-bedeuten, weniger Zusammenhang zu befürchten, wenn die Codierung.Wartung
Den
for loop
hat der nette Vorteil der Gruppierung aller Iterationen Operationen eng zusammen, so dass Sie besichtigt werden kann in einem Schuss und so überprüft.Abgesehen davon:
for
- Schleifen sind lesbarer und alles rund um besser für die regelmäßige iteration Muster, bei denen alswhile
Schleifen sollte reserviert werden, um unregelmäßige iteration patterns