5 Stimmen

List vs. List Iterator

Ich habe eine Liste:

List myList = new ArrayList();

Um von dieser Liste zu erhalten, gibt es zwei Methoden:

1.

for(Object obj : myList )
{
    // ein wenig Code
}

2.

Iterator objIt = myList.iterator();
while(obj.hasNext()) {
    Object obj = (Object)objIt.next();
    // ein wenig Code
}

Meine Frage ist, welche Methode speichereffizienter ist und schneller iteriert?

12voto

Jon Skeet Punkte 1325502

Sie tun dasselbe - die verbesserte for Schleife ist nur eine syntaktische Vereinfachung der ausführlichen Version (für Iterierbare; für Arrays ist es etwas anders). Wenn Sie den Iterator nicht explizit benötigen (zum Beispiel um remove() aufzurufen), würde ich die erste Version verwenden.

Sehen Sie sich Abschnitt 14.14.2 der Java Language Specification für weitere Details zur genauen Transformation an, die vom Compiler durchgeführt wird.

5voto

Pete Punkte 10360

Die Verwendung eines Iterator ermöglicht einen viel sichereren Zugriff auf die Liste von außerhalb der definierenden Klasse, da Sie den gesamten List beispielsweise nicht versehentlich überschreiben können. Sie können immer nur auf ein Element zugreifen: das oberste.

Die Richtlinie, die wir verwenden, ist daher, den Ansatz für jedes nur innerhalb der definierenden Klasse zu verwenden und immer dann, wenn die Liste von außen zugegriffen werden muss, muss ein Iterator verwendet werden. Dies erzwingt auch das Konzept, die Logik, wie ein Element modifiziert wird, innerhalb der Klasse zu halten, die es enthält. Alle komplexen Operationen, die von außen benötigt werden, müssen in öffentlichen Methoden innerhalb dieser Klasse implementiert werden.

2voto

Manish Punkte 3893

Der erste ist das, was du einen "erweiterten for-Schleife" nennst, der in JDK 1.5+ eingeführt wurde.

Es ist eine bequemere Möglichkeit, durch eine Liste zu iterieren. Außerdem benötigst du keine expliziten Casts, wenn du das benutzt.

Von der Leistungsstruktur her denke ich nicht, dass es einen großen Unterschied zwischen den beiden gibt.

2voto

daydreamer Punkte 79971

Iterator: Es gibt Ihnen das Ergebnis, wenn es benötigt wird, und speichert nicht das gesamte Ergebnis im Speicher.

1voto

Die verbesserte for-Schleife verwendete den Iterator nur innerhalb davon. Also sind beide gleich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X