For-Each und Modifikation eines Arrays

glitsch

Aktives Mitglied
Hi zusammen,
ich habe ein mehrdimensionales ArrayList und greife hier wie folgt auf die Daten zu:

Code:
	public void deleteCD(String s) {
		for(ArrayList a : cdkatalog){
			if(a.get(0).equals(s)) {
				int x = this.cdkatalog.indexOf(a);
				this.cdkatalog.remove(x);
			}
		}	
	}

Das funzt solange gut, wie das ArrayList mehr wie ein Objekt enthält. Wenn ich aber genau eines habe und gleichzeitig während der Iteration durch For-Each modifizeren möchte (remove!) dann krieg ich eine Exception. Ich bin gerade total überfragt, wie ich das Schönheitsproblem löse kann!!! :bloed:
 
Zuletzt bearbeitet von einem Moderator:
Du darfst die Liste über die du grad mit einer for-each Schleife iterierst nicht modifizieren.
Dafür musst du nen Iterator hernehmen, der kennt die Methode remove().
 
mit mind. 2 Objekten im ArrayList geht das aber? Man könnte einfach den ersten Fall abfangen, wenn das ArrayList nur 1 Objekt enthält... Das würde auch gehen. Habe ich gerade getestet. Aber gibt es keine einfache Lösung. 😱
Jetzt muss ich alles auslagern in mehrere Methoden? Eine Methode die nur iteriert?
 
Nein, auch mit mehreren Elementen funktioniert das nicht.
Mehrere Methoden brauchst du da auch nicht. Du musst lediglich deine for-each Schleife durch einen Iterator ersetzen.
 
Ok, danke. Wie kann ich auf den Inhalt eines Objektes im ArrayList zugreifen???
Code:
itr = cdkatalog.iterator();
		while(itr.hasNext()) {
			Object element = itr.next();
			if(element.equals(s)) {
				System.out.println(element);
			         ...
			}

:bahnhof:

Also ich muss ja das innere Objekt abfragen auf einen String. 😱
 
Evtl. hilft es Dir ja.

Java:
ArrayList<String> myArrayList = new ArrayList<String>();

myArrayList.add("einen String"); 
myArrayList.add("noch einen String"); 

ListIterator li = myArrayList.listIterator();

        while(li.hasNext())
        {
            String helpString = (String)li.next();
            System.out.println(helpString );

        }

--> ungetestet. nur reingetippt

Gruß
tschero
 
Da die ArrayList index-basiert ist, kannst Du auch rückwärts iterieren und ggf. ohne probleme löschen:

Code:
for(int i = myArrayList.size() - 1; i >= 0; i --) {
    String elem = myArrayList.get(i);
    if (mustRemove(elem)) {
        myArrayList.remove(i);
    }
}
 
Mal 'ne ganz nebensächliche Frage:
Code:
	public void deleteCD(String s) {
		for(ArrayList a : cdkatalog){
			if(a.get(0).equals(s)) {
Kann es sein, dass Du die Eigenschaften deiner CD's unstrukturiert als Elemente in weiteren ArrayLists hast, die ihrerseits in
Code:
cdkatalog
liegen?

Wenn Du unbedingt keine Klasse erzeugen wolltes könntest Du Doch wenigsten eine [JAPI]Map[/JAPI] einsetzen. Wer will den in einem halben Jahr noch wissen, welcher Index für welche Eigenschaft steht?

bye
TT
 

Zurück
Oben