löschen aus Linkedlist

Status
Nicht offen für weitere Antworten.
Z

ZAntjeZ

Gast
Hallo

Ich habe Objekte der Klasse StructObject in einer verketteten Liste namens children. Die Objekte werden hinzugefügt, wenn ein Benutzer einen entsprechenden Button klickt.
Mit der Maus kann ein Objekt ausgwählt werden, und soll wieder gelöscht werden können.

Was mach ich dabei in folgender Funktion falsch?? Es geht bei mir nämlich nicht.

Code:
public void delete(StructObject StrChild)
	{
		if (StrChild == null)
			throw new IllegalArgumentException();
	
		StructObject obj=Leinwand.getSelectObject();
		
		Iterator it=children.listIterator(children.size());
		while (it.hasNext())
		{
			Object child = it.next();
			if(child==obj)
			{
				children.remove(child);
			}
		}
	}

Tschau
Antje
 
R

Roar

Gast
ja, machst du, weil child == obj immer false ergibt, weil du nicht die objekte sondern referenzen vergleichst.
schreib einfach children.remove(obj), dann sollte das gehen. wenn nicht dann is was anderes falsch.

PS: wenn ein argument null ist wirft man normalerweise eine NullPointerException und keine IllegalArgumentException :wink:

edit: hat außerdem nix mit swing zu tun -> verschieb ich mal
 
Z

ZAntjeZ

Gast
Hallo,

die einfache Variante children.remove(obj) habe ich auch schon probiert. ging auch nicht, dedhalb ist der "Mist" ja erst rausgekommen.

Noch ein Tip??
 
R

Roar

Gast
achso ich weiß worans liegt :?
du musst in deiner StructObject die methode equals(Object o) überschreiben, damit LikedList deine objekte vergleichen kann. in der equals methode überprüfst du dann die ganze neigenschaften des objekts..

eine implementierung sieht dann z.B. so aus

Code:
public boolean equals(Object o) {
    if(o == this)
        return true;
    if(!(o instanceof StructObject))
        return false;
    StructObject obj = (StructObject) o;
    return obj.einIn == this.einInt;
}
 

nagash56

Aktives Mitglied
Vielleicht geht's auch so ohne was zu überschreiben. Caste das Objekt das du vom Iterator bekommst

Code:
StructObject child = (StructObject)  it.next();
        if(child.equals(obj))
         {
            children.remove(child);
         }
[/code]
 
R

Roar

Gast
nagash56 hat gesagt.:
Vielleicht geht's auch so ohne was zu überschreiben. Caste das Objekt das du vom Iterator bekommst

Code:
        if(child.equals(obj))

Hallohoo :!: damit equals() true zurückliefert muss sie die methode überschreiben
 

nagash56

Aktives Mitglied
Anderer Vorschlag.. du erzeugt ja deinen ListIterator mit

Code:
Iterator it=children.listIterator(children.size());

children.size() ist der Startindex des Iterators... das würde heissen nur das letzte Element in der Liste ist in deinem Iterator und dann würde er nicht viel finden
 
G

Guest

Gast
Geht noch immer nicht. Ich habe auch noch mal den Iterator geändert.

Code:
public boolean equals(Object o) 
	{ 
		if(o == this) 
			return true; 
		if(!(o instanceof StructObject)) 
			return false; 
		StructObject obj = (StructObject) o; 
		return obj == this; 
	}

	public void delete(StructObject StrChild)
	{
		if (StrChild == null)
			throw new IllegalArgumentException();
	
		StructObject obj=Leinwand.getSelectObject();
		
		System.out.println("löschen gedrückt von obj "+obj);
		
		Iterator it=children.iterator();
		while (it.hasNext())
		{
			Object child =  it.next(); 
					if(child.equals(obj)) 
					 {
					 	 
						children.remove(obj); 
						
						
					 } 
		}
	
	}
 
B

bygones

Gast
also roars vorschlag stimmt eigentlich so (du hast eine falsche equals methode !!!):
beispiel:
Code:
public class Test {
    public static void main(String[] args) {
        LinkedList l = new LinkedList();
        for (int i = 0; i < 10; i++) {
            l.add(new MyObject(i + ""));
        }
        System.out.println(l);
        boolean b = l.remove(new MyObject("3"));
        System.out.println(b);
        System.out.println(l);
    }
}

class MyObject {
    String s;

    public MyObject(String s) {
        this.s = s;
    }
    
    public boolean equals(Object o) {
        if(o == null || !(o instanceof MyObject)) {
            return false;
        }
        MyObject mo = (MyObject)o;
        return mo.s.equals(s);
    }
}
mit der equals methode gehts - wenn man sie erglässt löscht er das object nicht !

EDIT: Du vergleichst ja wieder nur die Speicheradressen - sobald du ein neues Objekt anlegst hat das ein andere Speicheradresse !! Du willst aber wissen ob es den gleichen Inhalt hat !!!
 
Z

ZAntjeZ

Gast
:bahnhof:
Sorry, ich bin ein bisschen doof. Ich kriegs nicht hin.

Wieso legst du bei l.remove() ein neues MyObject an?
Was muß ich an Stelle des Strings s nehmen? Ich habe nur die Liste children, oder das StructObject parent. Egal was ich nehme, es geht nicht.
Wenn ich ein Objekt ausgewählt habe, dann ist die Liste für dieses Objekt leer, wenn es keine unteren Elemente hat.
Ich habe mir children mal ausgeben lasse:

Code:
public boolean equals(Object o) 
	{ 
		if(o == this) 
			return true; 
		if(!(o instanceof StructObject)) 
			return false; 
		StructObject obj = (StructObject) o; 
		return obj.children.equals(children); 
	}

	public void delete(StructObject StrChild)
	{		
		System.out.println("löschen gedrückt von "+StrChild);
		
		System.out.println(children); 
			   boolean b = children.remove(StrChild); 
			   System.out.println(b); 
			   System.out.println(children); 
			   
	/*	Iterator it=children.iterator();
		while (it.hasNext())
		{
			Object child =  it.next(); 
				if(child.equals(obj)) 
					 {
					 	 
						children.remove(obj); 
					
					 } 
		}
	*/
	}

Ausgaben:

Code:
löschen gedrückt von StructSequence@c01e99     //Prüft, ob Button geklickt, und welches Objekt ausgewählt
[]         //Liste children vorm Löschen
false     //Löschen
[]        //Liste nach dem Löschen


Was muß ich machen? :bahnhof:
 
B

bygones

Gast
ich habe ein neues Objekt erzeugt um zu zeigen dass man auch beim erzeugen einer neuen Instanz die Instanz aus der Liste löschen kann die eben gleich ist...
es geht auch:
Code:
public class Test {
    public static void main(String[] args) {
        LinkedList l = new LinkedList();
        MyObject[] mos = new MyObject[10];
        for (int i = 0; i < 10; i++) {
            mos[i]= new MyObject(i + "");
            l.add(mos[i]);
        }
        System.out.println(l);
        boolean b = l.remove(mos[3]);
        System.out.println(b);
        System.out.println(l);
    }
}
hier ist es offensichtlich dass das löschen klappt....

die equals methode ist abhängig von dem Objekt das verglichen wird. D.h. frag dich einfach "Wann sind zwei meiner Objekte gleich". Mein Objekt ist ein Dummy Objekt das nur einen String speichert. Ich sage "wenn dieser String gleich ist, dann sind die Objekte gleich"....
Dann vergleichst du einfach die Variablen die die Gleichheit ausmachen - und wenn sie gleich sind sind die Objekte gleich !
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R LinkedList und Threads: Strukturprobleme bez. löschen von Elementen Allgemeine Java-Themen 3
A LinkedList Auslesen und Objekt Löschen Allgemeine Java-Themen 4
N Element aus LinkedList löschen Allgemeine Java-Themen 2
M löschen in Rot Schwarz Bäumen Allgemeine Java-Themen 6
M lineare Sondierung löschen Allgemeine Java-Themen 2
A Sicheres Löschen von Dateien Allgemeine Java-Themen 7
E Varialbe komplett Löschen Allgemeine Java-Themen 26
O Warum kann ich so keine Elemente löschen und erhalte einen IllegalStateException? Allgemeine Java-Themen 4
J ArrayList, ganze Zeilen löschen oder überspringen Allgemeine Java-Themen 4
glamdring273 Discord JDA, Kanal löschen Allgemeine Java-Themen 0
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
X Größten Werte in meinem Array löschen? Allgemeine Java-Themen 16
P Erste Schritte Dateien löschen Allgemeine Java-Themen 4
S Einzigartigen String in Datenbank finden und löschen Allgemeine Java-Themen 23
J Datei löschen, die Leerzeichen im Pfad hat Allgemeine Java-Themen 5
R Index in einem Array löschen Allgemeine Java-Themen 10
R Index in einem Array löschen Allgemeine Java-Themen 2
A Referenzen von Bildobjekten löschen Allgemeine Java-Themen 0
I PDF freigeben zum löschen Allgemeine Java-Themen 4
P Löschen eines keys in einer SortedMap Allgemeine Java-Themen 5
P JDK installieren Kann man die Ordner in C:\Users\*\AppData\LocalLow\Sun\Java\.... löschen? Allgemeine Java-Themen 3
X Löschen von einer Zeile in einer Text Datei. Klappt nicht. Allgemeine Java-Themen 4
J Java - Zeile aus Text datei löschen Allgemeine Java-Themen 13
W Arraylist Text Suchen und Datei löschen Allgemeine Java-Themen 5
G Datei löschen Allgemeine Java-Themen 8
Bluedaishi Dateien löschen die älter als das aktuelle Datum sind Allgemeine Java-Themen 9
L Doppelte eintraege im Stringbuffer löschen Allgemeine Java-Themen 4
J Doppelte Buchstaben löschen - letztes Wort macht er nicht Allgemeine Java-Themen 2
M lucene suchen/löschen/hinzufügen Allgemeine Java-Themen 4
R Leere Verzeichnisse löschen Allgemeine Java-Themen 11
S Speichern/Laden/Hinzufügen/Löschen der Array-Wörter; unerwartete Ausgabe Allgemeine Java-Themen 6
V System.out.println an jeder Stelle im Projekt löschen Allgemeine Java-Themen 4
M Batch zum Java Cache löschen Allgemeine Java-Themen 3
R Löschen von Files nicht möglich Allgemeine Java-Themen 11
KrokoDiehl Verzeichnisse via FileVisitor löschen Allgemeine Java-Themen 3
V Objekt löschen Allgemeine Java-Themen 7
127.0.0.1 StringBuffer leere Zeile löschen Allgemeine Java-Themen 8
J char-Array löschen Allgemeine Java-Themen 5
W n:m Beziehung Referenzen löschen Allgemeine Java-Themen 5
127.0.0.1 Zeilen in .txt Datei löschen Allgemeine Java-Themen 11
D Löschen-Methode im Stapelverarbeitungsprogramm Allgemeine Java-Themen 4
S JTable und Spalten löschen Frage Allgemeine Java-Themen 5
EnHancEd[] ArrayList gezielt löschen Allgemeine Java-Themen 9
S Nullen aus Array löschen Allgemeine Java-Themen 10
N Java lässt sich nicht löschen! Allgemeine Java-Themen 7
U Wie kann mit einen Java Applet Dateien erstellen,verschieben und löschen? Allgemeine Java-Themen 9
P Input/Output Ordner löschen --> geht nicht Datei --> Ja Allgemeine Java-Themen 6
K Leerzeiilen aus ArrayList löschen?! Allgemeine Java-Themen 7
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
S Singleton Instanz löschen Allgemeine Java-Themen 5
Z Ausschneiden, Kopieren, Einfügen, Löschen in JTextArea Allgemeine Java-Themen 5
K Java Feld Duplikate löschen Allgemeine Java-Themen 5
F SAXBuilder blockiert löschen von Dateien Allgemeine Java-Themen 2
L Datei sicher löschen/mehrfach überschreiben? Allgemeine Java-Themen 2
S Java komplett löschen und neu installieren Allgemeine Java-Themen 4
N Java geht nicht mehr zu löschen Allgemeine Java-Themen 5
E Regex alles nach ? löschen Allgemeine Java-Themen 4
I Über eine Liste iterieren und Objekte löschen. Wie löst man das sauber? Allgemeine Java-Themen 5
W 2D-Grafik nach getthumbnail läst sich Quellbild nicht mehr löschen Allgemeine Java-Themen 3
E Regex HTML Tag und Inhalt löschen Allgemeine Java-Themen 4
S Zeilen in einer Datei löschen Allgemeine Java-Themen 3
Z aus private List<???> list eintrag löschen Allgemeine Java-Themen 4
C Zeile aus einer CSV-Datei löschen Allgemeine Java-Themen 3
J Element aus HashSet löschen Allgemeine Java-Themen 2
S Element aus ArrayListe löschen --> Thread hängt sich auf Allgemeine Java-Themen 2
G Mit Batch-Datei verzeichnisse löschen Allgemeine Java-Themen 9
K von List getSelected auf ResultSet Datenbank löschen Allgemeine Java-Themen 2
S Reihen aus einem 2-dim. Array 'löschen' Allgemeine Java-Themen 2
K Threading - schreiben auf Hashmap/löschen - ConcurrentModificationException Allgemeine Java-Themen 3
A Zeilen aus einer Textdatei löschen Allgemeine Java-Themen 6
M Arraylist - Inhalte in Textferldern anzeigen, verändern und löschen. Allgemeine Java-Themen 18
S Liste Object Löschen Allgemeine Java-Themen 7
G Log4J - Logs älter als 3 Tage löschen Allgemeine Java-Themen 5
Quaxli Files massenhaft löschen Allgemeine Java-Themen 3
J Mit POI Zeile in Excel löschen Allgemeine Java-Themen 5
D Kann Tiff Datei nicht löschen Allgemeine Java-Themen 12
0x7F800000 Regex zum löschen vom unnötigen whitespace Allgemeine Java-Themen 4
Daniel_L Best Practice zum Löschen von Log-Files? Allgemeine Java-Themen 8
S Problem beim Löschen des Inhalts des Fensters Allgemeine Java-Themen 4
O Zeile eines Textfiles löschen Allgemeine Java-Themen 2
O File zum löschen "schließen" Allgemeine Java-Themen 2
G JTree Node löschen Allgemeine Java-Themen 2
C String to hex und hex-Werte löschen Allgemeine Java-Themen 2
H Benutzerkonto löschen Allgemeine Java-Themen 4
G Dateien löschen Allgemeine Java-Themen 3
G Datei löschen nach kopieren geht nicht Allgemeine Java-Themen 5
G List- Einträge löschen Allgemeine Java-Themen 3
T probleme mit file löschen Allgemeine Java-Themen 9
F Aus einer XML Datei löschen Allgemeine Java-Themen 3
M Endgültiges Löschen von Objekten Allgemeine Java-Themen 7
H JTable Löschen [Alle Zeilen aufeinmal Löschen] Allgemeine Java-Themen 6
Z Letztes zeichen eines strings löschen Allgemeine Java-Themen 3
S Löschen von Objekt erzwingen Allgemeine Java-Themen 4
T LDAP - Eintrag löschen Allgemeine Java-Themen 6
J Alte Log Files löschen mit log4j Allgemeine Java-Themen 3
C StyledDocument: SimpleAttributeSets löschen? Allgemeine Java-Themen 2
P löschen Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben