# Löschen von Referenzen in einer Liste



## Hero (15. Jan 2012)

Hallo,
Ich hab ein Problem und zwar:
Ich soll eine Liste erstellen und dann eben die Methoden Programmieren, die überprüfen sollen ob die Liste Leer ist, wie lang sie ist und so weiter. Ich soll auch eine Methode über die Methode:

```
public boolean remove(MyObject3DElement elem)
```
auch Elemente löschen anhand ihrer Referenz aber ich keine Ahnung wie das gehen soll.

Ich dachte mir, ich mach eine For Schleife die, denn Pointer der aktuellen Position immer hochzählt solange das Element nicht erreicht ist. Wenn der Pointer auf das Element zeigt, was gleich *elem* ist soll gelöscht werden aber ich weiß jetzt nicht genau wie ich das umsetzen soll.


```
public boolean remove(MyObject3DElement elem) {
		werden
	
		MyObject3DElement akt = root;
		for(int i=0;i < getLength();i++){
			akt= akt.nextPointer;
			
			if(elem.equals(akt)){
				
			}
		}
		
	return true;
	}
```

Ich hoffe ihr könnt mir weiter helfen


----------



## Gast2 (15. Jan 2012)

Kommt auf die Implementierung deiner Liste an. Hast du ne einfach-/doppeltverkette Liste, oder Liste basierend auf arrays, oder...?


----------



## Final_Striker (15. Jan 2012)

Hero hat gesagt.:


> Ich hoffe ihr könnt mir weiter helfen



Na, bei einer einfach verketteten Liste, musst du den Next-Zeiger des Vorgängerelementes auf den Nachfolgeelement umbiegen. Bei einer doppelt verketteten Liste dann halt auch noch den zweiten Zeiger dazu.


----------



## Hero (15. Jan 2012)

Ich hab eine doppelte verkette Liste.



> Der Konstruktoren definiert ein neues Objekt vom Typ MyObject3DElemen mit gegebenem Inhalt und Null als nextPointer




```
MyObject3DElement(MyObject3D in){
		inhalt=in;
	}
```




> Der Konstruktor definiert ein neues Objekt vom Typ MyObject3DElement mit gegebenem Inhalt und gegebenem nextPointer




```
MyObject3DElement(MyObject3D in, MyObject3DElement nptr,MyObject3DElement pptr){
		nextPointer = nptr;
		prevPointer=pptr;
		inhalt=in;
	}
```

Ich hab in den letzten Tagen gefehlt und es fällt mir


----------



## Gast2 (15. Jan 2012)

Wie Final_Striker schon geschrieben hat:
Willst du Konten X löschen musst du einfach die Zeiger des Vorgängers und Nachfolgers ändern.

```
X-1.next = X+1
X+1.prev = X-1
```
Ansonsten einfach mal auf nem Blatt Papier mal aufmalen wie die Zeiger verbogen werden müssen.


----------



## HimBromBeere (15. Jan 2012)

Du musst wahrscheinlich auch mal schauen, wie die equals-Methode deines MyObject3DElementes geschrieben wurde, damit du deine Elemente auch vergleichen kannst. Müssen zwei Elemente auf das selbe Objekt zeigen, oder reicht es, wenn sie gleiche Instanzvariablen haben, oder ...?


----------



## Hero (15. Jan 2012)

Danke erstmal an euch ! 
Falls ich trotzdem nochmal Fragen hab meld ich mich


----------



## Hero (16. Jan 2012)

Ich hab noch eine Frage und zwar wie kann ich Referenzen vergleichen also die Speicheradressen?


----------



## Final_Striker (16. Jan 2012)

Wozu willst du denn die Speicheradressen vergleichen?

Du musst Objekte miteinander vergleichen und das macht man mit der equals-Methode.


----------



## Hero (16. Jan 2012)

Das ist aber LEIDER teil der Aufgabe, dass wir die Elemente anhand deren Speicheradresse(Referenz) löschen.


----------



## Final_Striker (16. Jan 2012)

schau mal hier: http://www.java-forum.org/java-basi...-speicheradresse-referenz-zeigt-ausgeben.html


----------



## maki (16. Jan 2012)

Referenzen vergleicht man mit ==


----------



## Hero (16. Jan 2012)

Danke aber im Theard wird aber nicht, dass besprochen was ich brauche aber ich hab auf einer Internetseite javakurs-online.de gefunden wie man die Referenzen vergleicht, nämlich über "==".

EDIT: maki war schneller


----------



## Hero (22. Jan 2012)

Hallo,
Wir müssen jetzt noch Iterator in der Listen-Klasse implementieren. Die Methoden hasNext() und next() hab ich schon geschrieben aber bei der remove() Methode bekomme ich keinen Ansatz hin. Ich hoffe ihr könnt mir weiter helfen.

Was muss in der remove Methode damit ich ein Element aus der Liste löschen kann

Mein Code:

```
public class MyObject3DList implements Iterable{
....
 public Iterator iterator() {
			 return new Iterator() {
			 MyObject3DElement akt = root; 
				
			 
				public boolean hasNext() { 
					 return akt !=null; 
				}
				
				public MyObject3DElement  next() {
					if (akt == null){
							throw new NoSuchElementException("Kein weiteres Element vorhanden");
				}
				MyObject3DElement  in = akt;
				akt = akt.nextPointer;
				return in;
				}
				
				
				public void remove() {
					if(next()==null){
				 		throw new IllegalStateException();
				 	}
				 	else{
				 		//	
				 	}
				 }
			 };
			}
```


----------

