Objekt-"Selbstzerstörung"?

Luk10

Top Contributor
Grüße,

gibt es eine Möglichkeit ein Objekt sich selbst zerstören zu lassen?
Oder wie ich ein Objekt in einer Liste, über welche ich gerade iteriere, rauszunehmen ohne eine Exception zu bekommen?

Danke, Luk
 

Andi_CH

Top Contributor
Aus der Liste über die du iterierst darfst du kein Objekt einfach so entfernen - das gibt eine Exeption.

Liste erst kopieren, über die Kopie iterieren und die gewünschten Objekte aus der Originalliste entfernen

Wie du etwas aus einer Liste entfernst, hängt natürlich davon ab, was für eine Liste du einsetzt ....

Von suizidalen Objekten hab ich noch nie was gehört :D - Ein Objekt wird zerstört sobald niemand mehr eine Referenz darauf hält.
 

Andi_CH

Top Contributor
Aus einer Liste etwas entfernen über die man iteriert war wohl eines der ersten Problem in das uns der Dozent hineinlaufen liess - im Allgemeinen Fall ist es sicher nicht gut.
--
so bin wohl bald weg - die Firewall soll ausgeschaltet, ausgetauscht oder was auch immer werden
 

fastjack

Top Contributor
Aus einer Liste etwas entfernen über die man iteriert war wohl eines der ersten Problem in das uns der Dozent hineinlaufen liess - im Allgemeinen Fall ist es sicher nicht gut.

Du mußt halt nur den Iterator zum Entfernen benutzen, nicht die Listenmethoden.

Mit einer for Schleife am Listenende beginnend über die Liste iterieren und dann die relevanten Objekte aus dieser entfernen.

Hier passiert nix, weil der Index (der herabgezählt wird) nicht außerhalb der Listengröße (die sich ja immer weiter verkleinert) fallen kann.
 

Andi_CH

Top Contributor
Du mußt halt nur den Iterator zum Entfernen benutzen, nicht die Listenmethoden.
Ich versteh jetzt aber wirklich nur Bahnhof.

Wenn ich etwas aus einer Liste entfernen will muss ich es ja der Liste sagen dass da eines entfernt wird?

Paradebeispiel:
Java:
import java.util.Vector;

public class ListenTest {
	private static Vector<Integer> vect = new Vector<Integer>(); 

	public static void main(String[] args) {
		for(int i=0; i<10; i++)
			vect.add(i);
// so geht es
		for(Integer i : (Vector<Integer>)vect.clone())
			if (i%2==0)
				vect.remove(i);
		vect.clear();
		for(int i=0; i<10; i++)
			vect.add(i);
// so geht es eben nicht
		for(Integer i : vect)
			if (i%2==0)
				vect.remove(i);
	}
}
 
Zuletzt bearbeitet:
M

maki

Gast
Ich hab oben einen Link gepostet zu einem Collections Tutorial, wird mühselig & fehleranfällig alles per Trial & Error rausbekommen zu wollen.

Kurz:
Lösche nur mit dem Iterator aus einer Collection während dem Iterieren, die for-each Schleife bietet keinen expliziten Iterator und ist deswegen dafür ungeeignet.
 
G

Gast2

Gast
Wenn ich etwas aus einer Liste entfernen will muss ich es ja der Liste sagen dass da eines entfernt wird?
Oder du nimmst den Iterator:
Java:
	public static void main(String[] args) {
		List<Integer> numbers = new ArrayList<Integer>();
		for (int i = 0; i < 100; i++) {
			numbers.add(i);
		}
		
		Iterator<Integer> it = numbers.iterator();
		while (it.hasNext()) {
			int i = it.next();
			if (i % 2 == 0) {
				it.remove();
			}
		}
		
		System.out.println(numbers);
	}
 

Andi_CH

Top Contributor
Hm, die Variante mit dem clone gefällt mir besser - ist kompakter zu lesen.

(Ich bitte die Memoryhersteller mir einen Anteil am Geschäftsgewinn zu überweisen :D )
 

Andi_CH

Top Contributor
Java:
for (Iterator<Integer> it = vect.iterator(); it.hasNext();)
	if (it.next()%2==0)
		it.remove();
Ja, es geht auch Kompakt, aber verstehen werde ich das vielleicht wenn ich mal alt und erfahren bin :noe:

Der Iterator ist das worüber ich iteriere und da darf ich wegnehmen ???:L
Die Liste liegt einfach so rum - da darf ich nichts wegnehmen ???:L
 
M

maki

Gast
Java:
for (Iterator<Integer> it = vect.iterator(); it.hasNext();)
	if (it.next()%2==0)
		it.remove();
Ja, es geht auch Kompakt, aber verstehen werde ich das vielleicht wenn ich mal alt und erfahren bin :noe:

Der Iterator ist das worüber ich iteriere und da darf ich wegnehmen ???:L
Die Liste liegt einfach so rum - da darf ich nichts wegnehmen ???:L
Wodurch solltest du denn Konzepte verstehen die dir neu sind, wenn nicht durch lesen der Doku?
Hier nochmals der Link: Trail: Collections (The Java™ Tutorials)
 

Andi_CH

Top Contributor
Nur wenn man verpfuschten Code als besser zu lesen bezeichnen möchte, nix anderes ist das nämlich.
Sowas gehört zu den Basics.

WAS gehört zu den Basics? Wenn ich nicht mit dem Original arbeiten darf, arbeite ich mit einer Kopie.

ts ts ts

Wenn es deine persönlich Meinung ist so etwas verpfuscht zu finden, dann lass ich sie ohne Komentar gelten
Wenn du es aber deine Aussage für allgemein gültig hälst währe zwingend eine Erklärung fällig.
 
M

maki

Gast
WAS gehört zu den Basics?
Arbeiten mit Collections gehört zu den Basics in Java, wenn man die nicht drauf hat sollte man mehr lesen & fragen anstatt zu versuchen mit seinem Halbwissen falsche Antworten zu geben.

Wenn es deine persönlich Meinung ist so etwas verpfuscht zu finden, dann lass ich sie ohne Komentar gelten
Wenn du es aber deine Aussage für allgemein gültig hälst währe zwingend eine Erklärung fällig.
Bitte schön:
Das ist nicht nur meine persönliche Meinung, entweder man hat die Basics drauf oder nicht.
Falls nicht sollte man fragen und lernen, das gelernte kann man dann umsetzen.

In diesem Forum hat keiner etwas davon wenn offensichtlich wenn falsche Antworten kommen bzw. Anfänger anderen Änfängern falsche Antworten geben, "the blind leading the blind"...

Solltest mit deinen Sondermeinungen und Halbwissen und etwas zurückhaltender sein und lieber Leute vorlassen die wissen wovon sie sprechen.
 

FArt

Top Contributor
Zur Ergänzung von Makis Post:
Es ist gut wenn Anfänger auch Antworten posten. Es ist kein Problem wenn diese nicht völlig richtig sind, denn in der Regel werden diese dann noch richtig gestellt. Man kann viel lernen, indem man anderen versucht zu helfen.

Das einzige was nervt, ist Ignoranz, Beratungsresistenz und Faulheit, in beliebiger Reihenfolge.

just my 2 pence...
 

Andi_CH

Top Contributor
So langsam fühle ich mich persönlich angegriffen!

Letzte Äusserung zu diesem Thema:
Ich habe eine Aussage von einem mir Unbekannten in einen Forum - ok, nur ohne Begründung etwas zu glauben ist Religion - Religion ist Opium für das Volk und damit hab ich es nicht.
Also WARUM soll man das eine tun und das andere nicht?


Dann zum Link der sehr früh genannt wurde

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.

Was will "(optional operation)" aussagen?
WARUM darf ich denn nicht direkt von der "underlying" collection etwas entfernen?
(Nein "weil es sonst eine Exception gibt" reicht als Begründung nicht! "Ist so weil ist so" auch nicht)

Ich bin Ingenieur und die neigen bekanntlich dazu, dass sie immer wissen müssen WARUM etwas ist...

Etwas auswendig gelernt: SUPER ein Problem sehr schnell gelöst
Einmal Hintergründe begriffen: Noch besser! Mit etwas mehr Aufwand viele Probleme gelöst.
 

FArt

Top Contributor
So langsam fühle ich mich persönlich angegriffen!

Letzte Äusserung zu diesem Thema:
Ich habe eine Aussage von einem mir Unbekannten in einen Forum - ok, nur ohne Begründung etwas zu glauben ist Religion - Religion ist Opium für das Volk und damit hab ich es nicht.
Also WARUM soll man das eine tun und das andere nicht?


Dann zum Link der sehr früh genannt wurde

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.

Was will "(optional operation)" aussagen?
WARUM darf ich denn nicht direkt von der "underlying" collection etwas entfernen?
(Nein "weil es sonst eine Exception gibt" reicht als Begründung nicht! "Ist so weil ist so" auch nicht)

Ich bin Ingenieur und die neigen bekanntlich dazu, dass sie immer wissen müssen WARUM etwas ist...

Etwas auswendig gelernt: SUPER ein Problem sehr schnell gelöst
Einmal Hintergründe begriffen: Noch besser! Mit etwas mehr Aufwand viele Probleme gelöst.

Ich gehe nicht davon aus, dass hier jemand persönlich angegriffen werden soll.
Mit dem frühen Link hat man genug Material, noch mal konkret nachzufragen (ich habe xy nicht ganz verstanden) oder, noch besser, danach zu Googeln.
Es gibt kaum eine Frage, die hier im Forum oder auf dieser Welt noch nicht öffentlich beantwortet wurde.
Nicht jede iterierbare Collection bietet aufgrund ihrer Datenstruktur die Möglichkeit, Objekte währen der Iteration zu entfernen, das spiegelt sich in der Doku zu Iterator wieder. Von der darunter liegenden Collection darfst die nicht direkt was entfernen, weil du dir sonst den Ast absägst, auf dem du sitzt...
Wenn du als Inschinör was lernen möchtest, und wissen möchtest warum etwas ist wie es ist, dann sei neugierig... lerne googeln, lies Links, stell dir Fragen und googel weiter. Dann gibt es hier eine gute Basis für Diskussionen, denn das hier sind Diskussionsforen... auch wenn man oft etwas anderes glauben könnte.

Denn dem Inschinör ist bekanntlich nichts zu schwör... keep on...
 
Zuletzt bearbeitet:
B

bone2

Gast
So wie ich den englischen ausschnitt verstehe, wird es einfach inkonsistent wenn man direkt die collection ändert, da der iterator es nicht merkt. über die methode über den iterator, wird das durch den iterator an die collection weitergereicht und alles bleibt passend, weil beide von der änderung wissen.
 

Empire Phoenix

Top Contributor
Nicht direkt entfernen weil:

Iteratoren haben ein einheitliches interface, und es gibt viele dutzend klassen die diese unterstützen, wie diese intern implementiert sind ist aber eben gerade bei der benutzung über iteratoren irrelevant. Zudem soll die Exception davor schützen zugriffsprobleme zu haben.

iterator.remove() löscht das aktuelle element in einer weise die die unterliegende plattform unterstützt.
HIER:
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.

Optional operation, weil optional niemand zwing dich diese zu benutzen.

Ansonsten wenn du die Links die hier gepostet sind lesen würdest:
Code:
Sie wird oft dann geworfen(bzw. die meisten Fragen im Zusammenhang mit dieser Exception entstehen…), wenn man mit einem Iterator (for-each, iterator(), etc.) über eine Collection läuft und dabei diese Collection direkt über Methoden der Collection verändert (dabei spielt es keine Rolle ob dies durch den selben Thread passiert(oder man sogar nur einen hat), oder aber ein anderer Thread eine Veränderung an ihr durchführt)
Das kommt daher, dass die Iteratoren als sogenannte fail-fast Iteratoren implementiert sind, das heißt, dass sie lieber sofort bei Änderungen reagieren(also eine RuntimeException wie diese werfen) , anstatt später irgendwann in ein willkürliches, nicht-deterministisches Verhalten zu laufen.

... http://www.java-forum.org/entwuerfe/109419-fail-fast-iterator-concurrentmodificationexception.html

Wenn ich nicht mit dem Original arbeiten darf, arbeite ich mit einer Kopie.
dies aussage ist super schlecht, weil sie ebeng erade nciht das Poblem löst sondern umgeht ->
Du weist nicht "WARUM etwas ist..."
 

Der Müde Joe

Top Contributor
>Was will "(optional operation)" aussagen?

Ein spezieller Iterator kann das auch nicht implementieren (implmementieren aber nicht unterstützen), der wirft dann eine UnsupportedOperationException oder so.

>WARUM darf ich denn nicht direkt von der "underlying" collection etwas entfernen?

Der Iterator ist eine Aufnahme zu einem gewissen Zeitpunkt. zB {1,2,3,4,5}
Zu diesem Zeitpunkt durchlaufen wir die Collection. Verändert man nun
das Original, ist die Aufnahme zum Zeipunkt nich mehr richtig. zB {1,2,4,5}.
Der Iterator durchläuft dabei, das Original als Zeitpunkaufnahme (keine kopie).
Eine Veränderung am Original zum Zeitpunkt des Durchlaufs....peng..
Verändern wir higegen beim Durchlaufen das Original (über die Kamera (Iterator), so weiss die aufnahme
von der 'verfälschung', des ist ok..

Hab mich hoffentlich irgenwie verständlich ausgedrückt..
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J ArraList Objekt mit JButton anzeigen lassen Java Basics - Anfänger-Themen 4
hennskand Brauche Hilfe Zwischenzustände von Objekt aus rekursiver Methode speichern Java Basics - Anfänger-Themen 6
krgewb Über Objekt, das Objekte desselben Typs enthält iterieren Java Basics - Anfänger-Themen 5
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
Rxiiz Objekt aus ComboBox entfernen Java Basics - Anfänger-Themen 4
I JSON in Objekt umwandeln Java Basics - Anfänger-Themen 3
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
B Objekt aus generalisierter Liste entfernen Java Basics - Anfänger-Themen 11
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
Say Objekt Java Basics - Anfänger-Themen 4
Say abstract class und Objekt erzeugen - Dringend Hilfe Java Basics - Anfänger-Themen 10
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
K warum kann ich das Objekt nicht erstellen ? Java Basics - Anfänger-Themen 2
K wie kann ich alle Attribute von dem Objekt(pagode) ausgeben lassen ? Java Basics - Anfänger-Themen 3
H Ein übergegebenes Objekt auf null setzen Java Basics - Anfänger-Themen 9
M BlueJ Objekt in Objektliste Java Basics - Anfänger-Themen 2
B Objekt in Klassendiagramm an fremdes Objekt weiterreichen? Java Basics - Anfänger-Themen 6
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
amelie123456 Objekt Farbe Quellcode Java Basics - Anfänger-Themen 4
M Objekt in einem Objekt speichern Java Basics - Anfänger-Themen 9
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
missy72 Klassen Objekt Array NullPointerException Java Basics - Anfänger-Themen 3
J Hinzufügen eines Objektes in ein Objekt-Array Java Basics - Anfänger-Themen 62
O Warum bekommen wir nicht die Referenz vom zurückgegebenen Objekt? Java Basics - Anfänger-Themen 4
K Ein Objekt Auto kennt den Inhalt seines links und rechtsstehenden Autos, wie soll man das ermöglichen Java Basics - Anfänger-Themen 2
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
melaniemueller Fernseher als Objekt Java Basics - Anfänger-Themen 9
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
Nina Pohl Ein Vorgang bezog sich auf ein Objekt, das kein Socket ist Java Basics - Anfänger-Themen 6
B Objekt kopieren und sämtliche Referenzen von diesem Objekt? Java Basics - Anfänger-Themen 3
S JavaFX - Objekt an neue Stage übergeben Java Basics - Anfänger-Themen 12
T Verständnisfrage Objekt Getter Setter Java Basics - Anfänger-Themen 102
P Objekt in mehreren Methoden verwenden. Java Basics - Anfänger-Themen 3
S Aufzurufendes Objekt Java Basics - Anfänger-Themen 3
CptK Überprüfen ob übergebenes Objekt zu Generics passt Java Basics - Anfänger-Themen 2
C Konstruktor ab serialisiertem Objekt Java Basics - Anfänger-Themen 4
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
P Wie rufe ich Methoden mit einer Referenz auf eine Klasse||Objekt auf Java Basics - Anfänger-Themen 4
J Input/Output Konstruktor ergänzen, der zur Datei mit einem Objekt passt Java Basics - Anfänger-Themen 0
P Ein Objekt nach einem String durchsuchen? Java Basics - Anfänger-Themen 7
S Objekt aus Arraylist in andere Arraylist kopieren? Java Basics - Anfänger-Themen 2
J Objekt-Array dynamischer Länge aus Benutzereingaben erstellen Java Basics - Anfänger-Themen 6
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
C Arrays - deklarieren, initialisieren? Ist das ein Objekt? Java Basics - Anfänger-Themen 3
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
B Objekt von EJB in Controller (CDI) - Klasse füllen? Java Basics - Anfänger-Themen 3
L Zufälliges Objekt aus der ArraylList ohne java.util.Random Java Basics - Anfänger-Themen 56
N LocalTime einem Objekt zuweisen Java Basics - Anfänger-Themen 2
N Länge eines Arrays in einem Objekt testen Java Basics - Anfänger-Themen 51
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
tom.j85 Doppelte Foreach Schleife: Am Ende wird immer das Gleiche Objekt eingefügt Java Basics - Anfänger-Themen 4
J RSA Verschlüsselung Testen / byte[] in Objekt umwandeln Java Basics - Anfänger-Themen 1
M ArrayList - Objekt kopieren und ändern Java Basics - Anfänger-Themen 11
L Objekt an Methode übergeben Java Basics - Anfänger-Themen 4
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
J Y-Koordinate von GUI-Objekt bestimmen Java Basics - Anfänger-Themen 2
M Auf erstelltes Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 5
H Referenz Objekt aufrufen Java Basics - Anfänger-Themen 12
M Objekt mit eindeutiger ID löschen, das nächste Objekt hat dann diese ID Java Basics - Anfänger-Themen 5
N Mit Objekt der Superklasse auf Methode der Subklasse zugreifen Java Basics - Anfänger-Themen 6
E Objekt durch Benutzer über Konsole erzeugen - Java Java Basics - Anfänger-Themen 3
J Objekt bei Auswahl in jList ändern Java Basics - Anfänger-Themen 6
Kirby.exe Generische Objekt Instanz erstellen Java Basics - Anfänger-Themen 14
H Objekt aus einem Array löschen Java Basics - Anfänger-Themen 1
H Objekt im Array speichern Java Basics - Anfänger-Themen 2
H Objekt mit Methode erstellen Java Basics - Anfänger-Themen 6
H Objekt als Attribut speichern Java Basics - Anfänger-Themen 11
E Was kommt in ein Objekt und was in die Main Methode? Java Basics - Anfänger-Themen 8
R Objekt in Konstruktor ist nicht zulässig Java Basics - Anfänger-Themen 5
W OOP Objekt Methode Java Basics - Anfänger-Themen 9
A Objekt in Arrayliste Java Basics - Anfänger-Themen 2
B Mit methode Objekt aus anderer Klasse erstellen Java Basics - Anfänger-Themen 6
I Object-Oriented Programming, Objekt erzeugen Java Basics - Anfänger-Themen 1
M Objekt einer Klasse speichert die Veränderung nicht Java Basics - Anfänger-Themen 1
K Konstruktor für ein Objekt mit Zugriffsmethoden Java Basics - Anfänger-Themen 7
S Variablen Klassenvariable über Objekt aufrufen Java Basics - Anfänger-Themen 16
A Zufälliges Objekt basierend auf Wahrscheinlichkeiten bekommen. Java Basics - Anfänger-Themen 4
R Value von einem JSON-Objekt ausgeben Java Basics - Anfänger-Themen 4
P Objekt aus String-Array erzeugen Java Basics - Anfänger-Themen 104
N Bewegtes Objekt soll sich um eine Parallele bewegen Java Basics - Anfänger-Themen 0
S Objekt-Attribute "variabel" gestalten Java Basics - Anfänger-Themen 10
J Datenbankstruktur als Objekt anlegen Java Basics - Anfänger-Themen 4
L Objekt aus Textdatei in ArrayList speichern Java Basics - Anfänger-Themen 4
B Objekt an neue Stage übergeben? Java Basics - Anfänger-Themen 9
scratchy1 Wie deklariert man eine Methode, die ein Objekt zurückgeben soll? Java Basics - Anfänger-Themen 22
B Klassen Zugriff auf ein Objekt einer Klasse aus einer Methode heraus Java Basics - Anfänger-Themen 4
J Objekt erste freie Stelle zuweisen Java Basics - Anfänger-Themen 3
S Zugriff auf Objekt Java Basics - Anfänger-Themen 5
C Objekt soll ein Array sein. Java Basics - Anfänger-Themen 15
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
CptK Datentypen Objekt lässt sich nicht zu arraylist hinzufügen Java Basics - Anfänger-Themen 2
R Vererbung werte von einem Objekt aus ein anderes übertragen Java Basics - Anfänger-Themen 7
Z Objekt Array führt zum NullPointerException Java Basics - Anfänger-Themen 2
L Objekt Typ zur Laufzeit ermitteln Java Basics - Anfänger-Themen 1
F Referenz an ein Objekt in einer anderen Klasse erstellen(Nullpointer exception) Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben