Modifizierte ArrayList für weiteren Ablauf beibehalten?

HexaDeff

Mitglied
Hi,

also ich stehe (mal wieder...) vor einem Problem. Und zwar habe ich mittlerweile eine ArrayList mit n-Objekten erstellt, aus der ich ein Objekt mittels Iterator auslese. Nun wird mir das Objekt (eine Zahl) auf dem Bildschirm mittels System.out.println(); angezeigt. Gleichzeitig wird es aus der ArrayList entfernt, so dass nun nur noch n-1 Objekte vorhanden sind. Nun möchte ich im nächsten Schritt lediglich mit den n-1 Objekten weiter fortfahren. Bei mir nimmt er jedoch wieder die Liste mit n Objekten.

Wie kann ich das umgehen? Muss ich eventuell die Liste mit n-1 Objekten in eine weitere ArrayList speichern und dann mit der neuen Liste weitermachen? Geht es vielleicht auch noch irgendwie anders? Sonst hätte man bei vielen Objekten doch ziemlich viel Code, oder?

Hier ist nun der Code:

Java:
import java.util.*;

public class forum {
	public static void main(String args[]){
		
		ArrayList<Integer> number = new ArrayList<Integer>();
		number.add(0);
		number.add(1);
		number.add(2);
		number.add(3);
		
		Collections.shuffle(number);
		System.out.println("Liste zu Beginn");
		System.out.println(number);
		
		Iterator<Integer> iterator = number.iterator();
		while(iterator.hasNext()){
			switch(iterator.next()){
			case 0:
				iterator.remove();
			break;
			case 1:
				iterator.remove();
			break;
			case 2:
				iterator.remove();
			break;
			case 3:
				iterator.remove();
			break;
			}
			
			System.out.println("Liste am Ende");
			System.out.println(number);
		break;
		}
	}

}
 
Zuletzt bearbeitet:
Eine Methode könnte die ArrayList zurückgeben, die Methode, die diese dann aufruft bekommt die Liste mit n-1 Objekten übergeben.

Was willst du denn genau damit machen?
 
Java:
iterator.remove();

Du entfernst das Element ja nur aus dem Iterator, welcher intern eine Kopie der Liste hält. Du musst also von der ArrayList remove(Object obj); aufrufen.

..und das ist Quark. Stimmt nicht.
 
Zuletzt bearbeitet:
Das ist doch Quatsch! Natürlich entfernt der Iterator das Element aus der Liste, anderenfalls wäre die remove-Methode doch recht sinnlos.

ja aber

Removes from the underlying collection the last element returned by the iterator (optional operation). This method can be called only once per call to next. The behavior of an iterator is unspecified if the underlying collection is modified while the iteration is in progress in any way other than by calling this method.
 
Removes from the underlying collection the last element returned by the iterator (optional operation). This method can be called only once per call to next. The behavior of an iterator is unspecified if the underlying collection is modified while the iteration is in progress in any way other than by calling this method.

Ja, macht er in seinem geposteten Beispiel auch nicht oder?
 
Ja, macht er in seinem geposteten Beispiel auch nicht oder?

Nein, das mache ich hier (noch) nicht. Das wäre allerdings die bessere Variante, da sie das Objekt komplett aus der Liste löschen würde, oder?

EDIT: Ich habe das hier so gestaltet, weil ich das zufällig wiedergegebene Element löschen möchte. Deswegen erhalten die Zahlen 0, 1, 2 und 3 den Befehl iterator.remove(); im Switch-Case, für den Fall das sie aufgerufen werden. Wie es allgemein per Variable gelöst wird, also dass die letzte aufgerufene Zahl oder das zuletzt aufgerufene Objekt gelöscht wird, habe ich im Internet nicht gefunden und wenn ich es doch gefunden haben sollte, dann wusste ich nicht, wie man das realisieren sollte 🙁.
 
Zuletzt bearbeitet:
Hier noch nicht, aber wenn ich die Variable number weiterverwenden möchte, wird die zu Beginn eingegebene Liste verwendet, statt die (durch das Löschen) neu erzeugte.

EDIT: Nun funktioniert es bei mir auch wie es sollte. Ich habe den Fehler gefunden. Ich bin noch in der Methode des "alten" Iterator drin gewesen, obwohl ich eine neue hätte erstellen müssen.
 
Zuletzt bearbeitet:

Zurück
Oben