Ganz kurze Frage zur erweiterten For-Schleife

lisali

Erfahrenes Mitglied
Hallo,

folgender Code:

Code:
ArrayList<String> StringList = new ArrayList<String>();
    StringList.add("N");
    StringList.add("I");
    StringList.add("T");
    StringList.add("I");
    
    for(String str : StringList){
    	System.out.println(str);
    }

Ausgegeben wird aber:

Code:
N
I
T
I
N

Kann mir jemand sagen wieso er die Schleife 5 mal durchläuft bzw. das 1erste (nullte --> [0]) Index-Element am Ende nochmal ausgibt?

LG,

Lisa
 
Hallo!

Zuallererst bitte ich dich darum Java statt Code Tags zu benutzen.

Zu deinem Beispiel:

Der gepostete Code funktioniert einwandfrei.


Btw:

Um andere Collections wie Verlinkte Listen, Sets usw. zu durchlaufen solltest du einen Iterator benutzen.
Weiters ist es üblich Variablennamen mit einem kleinen Buchstaben beginnen zu lassen, statt einem großen.

mfg
Martin
 
Zuletzt bearbeitet:
Hey,

ja, habe den Fehler entdeckt. Entschuldigt.

Kannst du mir ein Beispiel geben für so einen Iterator?
Okay, das merk ich mir. Das wäre dann also stringList statt StringList?

Dankeschön!!

LG,

Lisa
 
Jep zu beidem.

Java:
List<String> stringList = new ArrayList<String>(); //Weg mit unnötigen Methoden
Iterator<String> iterator = stringList.iterator();
while(iterator.hasNext())
	System.out.println(iterator.next());
 
Dankeschön.

Also.. werde es gleich selbst probieren mit dem Iterator, aber habe die Vermutung, dass er immer mit hasNext prüft, ob weitere Elemente enthalten sind in der ArrayList und wenn nicht, endet die Schleife, oder?

Wo verwendet man denn üblicherweise sonst so die erweiterte For-Schleife?
 
Hallo!

Ich hab mich vorhin etwas verschrieben...

Soweit ich weiß, ist der Zugriff bei einer ArrayList über den Index (mit for loop) viel schneller als mit einem Iterator.
Anders sieht es zum Beispiel bei einer LinkedList aus...

...dass er immer mit hasNext prüft, ob weitere Elemente enthalten sind in der ArrayList und wenn nicht, endet die Schleife, oder?

Ja, hasNext() liefert false sobald alle Elemente durchlaufen sind, und die Schleife endet.

Bitte beachte, dass der Aufruf von next() nach rückgabe des Elements den Zeiger unwiederruflich auf das nächste Element setzt.
Ein häufiger fehler ist es nämlich in einem Schleifendurchlauf mehrmals next() aufzurufen.

mfg
Martin
 
Zuletzt bearbeitet:
Stimmt.
Es ist deine Entscheidung, einige sagen man soll die Iteratoren verwenden, ein paar raten davon ab. Ist unter Umständen auch eine Glaubensfrage, Google verratet da sicher mehr. Ich selbst verwende immer eine eigene Countervariable, so wie z. B. hier (grad geschrieben)

Java:
private static void load(String username, Client client)
{
	Building playersHeadquarter = null;
	for(int i = 0; i < Client.getBuildingCount() && playersHeadquarter == null; i++)
	{
		Building building = Client.getBuilding(i);
		if(building.getTyp().isTyp(Building.BUILDING_TYP_HEADQUARTER) && building.getOwner().equals(username))					
		{
			playersHeadquarter = building;
			client.setHeadquarter(building);
		}
	}
}
 
Hey.

Das heißt also doch lieber die erw. For-Schleife bei ArrayLists?

Ich bin noch neu bei Java, deswegen weiß ich leider noch nicht was eine LinkList ist im Vergleich zur ArrayList.
 
Eine LinkedList ist (von außen) quasi das selbe, nur schreiben/löschen ist schneller und Feldzugriff langsamer als bei einer Array.
 

Neue Beiträge

Zurück