# ArrayList gezielt löschen



## EnHancEd[] (19. Jan 2012)

Hallo.

Ich möchte alle Elemente aus der ArrayList löschen, die mit "P" anfangen.

Ich weiß grade leider nichtmehr den Befehl dafür, wär nett wenn jmd mir weiter helfen könnte.

Greetz


```
import java.util.*;
public class Staedte {

	
	public void deleteP() {
		
		ArrayList<String> staedte= new ArrayList<String>();
		staedte.add("Stuttgart");
		staedte.add("München");
		staedte.add("Plochingen");
		staedte.add("Hannover");
		staedte.add("Frankfurt");
		staedte.add("Ludwigsburg");
		staedte.add("Bielefeld");
		staedte.add("Potsdam");
		staedte.add("Baden-Baden");
		staedte.add("Passau");
		
		
		if(staedte.equals() {
		staedte.removeAll(staedte);
		}
		
	for (String s: staedte) {
		
	  System.out.println(s);
}
}
	
	public static void main(String[] args)
	{						

    }
}
```


----------



## SlaterB (19. Jan 2012)

alle Methoden von String einigermaßen zu kennen/ sie im Zweifel einmal durchzugehen, ist immer eine sinnvolle Beschäftigung in Java,
wichtige Klasse
String (Java Platform SE 6)

dabei sollte sich das doch von selber klären oder bleibt die Frage offen?

den jeweiligen String musst du erst aus der Liste herausholen und auch evtl. entfernen,
das ist ein zweiter 'Problem-Komplex', dazu auch Fragen? Iterator bietet sich an, falls bekannt


----------



## faetzminator (19. Jan 2012)

Am einfachsten geht das mit einem Iterator:

```
Iterator<String> it = staedte.iterator();
while (it.hasNext()) {
    String value = it.next();
    if (value.startsWith("P")) {
        it.remove();
    }
}
```


----------



## SlaterB (19. Jan 2012)

ok, Denken ist mal wieder unnötig..


----------



## EnHancEd[] (19. Jan 2012)

Danke für die schnellen Antworten.

wusste nur die Methode nichtmehr, Iterator ist bekannt.

Klasse wie schnell man hier ne Antwort kriegt.

Greetz


----------



## faetzminator (19. Jan 2012)

SlaterB hat gesagt.:


> ok, Denken ist mal wieder unnötig..



Sorry, ich dachte s geht um den Iterator und nicht das [c]startsWith()[/c]. Für ersteres brauchts solch ein Beispiel, sonst wird da draus irgendeine hässliche for-Schleife o.ä. gemacht


----------



## EnHancEd[] (19. Jan 2012)

faetzminator hat gesagt.:


> Sorry, ich dachte s geht um den Iterator und nicht das [c]startsWith()[/c]. Für ersteres brauchts solch ein Beispiel, sonst wird da draus irgendeine hässliche for-Schleife o.ä. gemacht




Jop, wusste nichtmehr dass das nicht mit der For each schleife geht, 
aber man kann ja gezielt nur löschen wenn man das nicht mit ner for each macht.

Ging aber auch haupstächlich um das startsWith, das ist mir nichtmehr eingefallen.

Greetz


----------



## faetzminator (19. Jan 2012)

Das Problem mit der for-each ist, dass dort im Hintergrund ein Iterator erstellt wird, und mit diesem durch die Elemente iteriert wird. Während man mit einem Iterator arbeitet, kann man auf der Liste keine Modifikationen machen. Ganz abgesehen davon, dass du den Index manuell zählen müsstest.

Natürlich gings auch mit einer for-Schleife, aber dann musst du auch wieder [c]get(i)[/c] verwenden, und du musst vor allem den Index von Hand anpassen, wenn du [c]remove()[/c] auf der Liste aufrufst, also [c]remove(i--)[/c]. Finde ich nicht so schön.


----------



## pro2 (19. Jan 2012)

faetzminator hat gesagt.:


> Sorry, ich dachte s geht um den Iterator und nicht das [c]startsWith()[/c]. Für ersteres brauchts solch ein Beispiel, sonst wird da draus irgendeine hässliche for-Schleife o.ä. gemacht



Warum hässlich?

```
for(String s: staedte){
    if (s.startsWith("P")) {
        staedte.remove(s);
    }
}
```
Ist doch viel schöner  

edit: ach ich hab den letzten Post ganz übersehen! Tut mir leid.
Aber wird die for-each Schleife nicht in sowas umgewandelt?:


```
for(int i = 0; i < staedte.size(); i++){
    if(staedte.get(i).startsWith("P")){
        staedte.remove(i); 
    }
}
```

edit edit: Joa, die Exception fliegt. Naja, gut zu wissen, danke für die Antwort


----------



## faetzminator (19. Jan 2012)

1. Ist das eine for-each Schleife, keine for Schleife und
2. Hab ich bereits erläutert, dass dies nicht funktioniert
Hier würde AFAIK eine [c]ConcurrentModificationException[/c] geworfen werden.

Edit: und ich hab vor deinem Edit geschrieben :bae:


----------

