Ganz kurze Frage zur erweiterten For-Schleife

Wenn du während einem Schleifendurchlauf etwas aus der Liste entfernen möchtest, musst du das in einer normalen for-Schleife machen.
Dann musst du aber rückwärts durch die Liste laufen.

Wenn du aber mit schon weißt welches Object du aus der Liste entfernen möchtest, kannst du das auch mit
Code:
list.remove("A");
lösen.

Gruß

Sascha
 
Zur ersten Frage:

Ja.
Jedoch würde ich immer die Richtige List wählen.
Egal wie groß oder klein die Applikation ist.

Und das mit dem Zeiger verstehe ich auch, denke ich. Wenn was neues z.B. bei 50 eingefügt wird, wird die "alte" 50 zur 51, oder? Aber geht man bei einer Liste von 100 Elementen aus, verschiebt sich ja dann auch alles um 1?

Ja, es verschiebt sich in diesem Fall alles um 1.
Es ändern sich einfach die entsprechenden Zeiger.

Bei einer ArrayList müsste diese intern ein neues Array erstellen und umkopieren, oder im bestehenden Array Verschiebeoperationen ausführen.

mfg
Martin
 
Ok, verstehe. Und der einzige Nachteil bei LinkedList ist dann also nur der Feldzugriff meinte Kai008 vorhin. Also, heißt das, wenn ich was mit link.get(x) aufrufen/ausgeben lassen möchte?
 
Ja, weil er den verlinkten Elementen eben durchrennen muss, wärend die Felder "vorreserviert" und damit die Felder bekannt sind.
Ach ja, wenn du nur Buchstaben hinzufügst ist es vielleicht besser Charactere und keine Strings zu nutzen, Strings enthalten ein Array von Chars.


btw. erste Variante liefert natürlich eine Exception, die zweite aber nicht.

Java:
private static void var1(List<String> stringList)
{
	for(byte b = 0, size = (byte) stringList.size(); b < size; b++)
		if(stringList.get(b).equals("O"))
			stringList.remove(b);
}
private static void var2(List<String> stringList)
{
	for(byte b = 0; b < stringList.size(); b++)
		if(stringList.get(b).equals("O"))
			stringList.remove(b);
}
 
@Kai
Was du allerdings nicht beachtest ist, dass sich die Index-Werte verändern. Jedesmal wenn du ein Element entfernst, wird ein Element nicht überprüft, weil es dann den gleichen Index hast, wie das das du entfernt hast.

Das heißt du müsstest jedesmal den Index um 1 veringern. Das ist aber ein unnötiger Aufwand, deshalb rückwärts.

Wenn man es wie in deinem Beispiel was entfernen möchte, muss man das nicht so machen.
Code:
stringList.remove("o");
funktioniert genauso, ohne Schleife. Da wird intern ebenfalls mit equals geprüft, ob es sich um das richtige Element handelt.

Gruß

Sascha
 
@Kai
Was du allerdings nicht beachtest ist, dass sich die Index-Werte verändern. Jedesmal wenn du ein Element entfernst, wird ein Element nicht überprüft, weil es dann den gleichen Index hast, wie das das du entfernt hast.

Das heißt du müsstest jedesmal den Index um 1 veringern. Das ist aber ein unnötiger Aufwand, deshalb rückwärts.

Wenn man es wie in deinem Beispiel was entfernen möchte, muss man das nicht so machen.
Code:
stringList.remove("o");
funktioniert genauso, ohne Schleife. Da wird intern ebenfalls mit equals geprüft, ob es sich um das richtige Element handelt.

Gruß

Sascha

Das hab ich immer noch nicht so ganz verstanden. Könntest du ein Code-Beispiel zeigen wie soetwas aussehen würde?
 
Zuletzt bearbeitet von einem Moderator:
Java:
public static void main(String[] args)
{
	List<String> stringList = new ArrayList<String>();
	stringList.add("L");
	stringList.add("I");
	stringList.add("S");
	stringList.add("A");
		
	stringList.remove("S");
		
	for(byte b = 0, size = (byte) stringList.size(); b < size; b++)
		System.out.println(stringList.get(b));
}

Code:
L
I
A

Da musst du mit Chars aber aufpassen, weil die gerne mal automatisch zu Ints gecastet werden.
 

Neue Beiträge

Zurück