Wie Iterator Remove implementieren?

DisasterJava

Mitglied
Hi,

Ich hab einen Binärbaum gemacht und eine Iterator-Klasse dazu. Soweit funktioniert das ganze. Allerdings weiß ich nicht wie man vom Interator das Remove Implementieren kann und ich finde auch keine ordentliche Beschreibung dazu. Es heißt ja es löscht das letzte Element welches mit Next zurück gegeben wurde.. aber wie kann man darauf zugreifen?

Danke für die Hilfe
 

DisasterJava

Mitglied
Hi,

mir geht es um die Implementation.

Ich habe eine Klasse BST und in dieser eine "private static class BSTIterator implements Iterator"

Dadurch muss ich ja einige Methoden implementieren und hier kann man auch Remove implementieren, weil wenn man das nicht macht nützt ja element.remove() gar nix.

So mein Problem ist ja nur ich kann im Iterator remove nicht meine remove Methode von BST aufrufen weil ich da ja gar nicht ran komme nur weil ich ein element (Node) von BST habe.

.. Hoffe das war verständlicher :)
 
S

SlaterB

Gast
wer erstellt wann wo warum welchen Iterator und welche anderen Programmzusammenhänge kannst du noch erzählen?
übergib den BST, was immer das ist, an den Iterator, z.B. im Konstruktor, schon kennt er ihn/es
 

DisasterJava

Mitglied
Also ich hab mal den Code angehängt..
Der Iterator wird so aufgerufen:

Java:
 final int NELEMS = 10000;
    SortedSet set = createSet();

    for (int i=1; i<=NELEMS; i++)
      set.add(i);
    
    Iterator<Integer> it = set.iterator();
    int i=0;
    while (it.hasNext()) {
      assertEquals(++i, it.next().intValue());
      it.remove();
      assertEquals(NELEMS-i, set.getSize());
    }

Java:
package collections;

import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Stack;

public class BSTSet implements SortedTreeSet {

	Node root;
	private int size; 
	private int height;

	/**
	 *This is a Node object.
	 *
	 */
	private static class Node {

		@SuppressWarnings("unchecked")
		Comparable val;

		Node left; // Referenz auf ein kleineres Objekt
		Node right; // Referenz auf ein groesseres Element
		Node parent; // Referenz auf den Parent

		/**
		 * Constructor of a new node object.
		 * @param val
		 * value of the node
		 * @param left
		 * left child node
		 * @param right
		 * right child node
		 * @param parent
		 * parent of the node
		 */
		@SuppressWarnings("unchecked")
		public Node(Comparable val, Node left, Node right, Node parent) {
			this.val = val;
			this.left = left;
			this.right = right;
			this.parent = parent;
		}

	}

	/**
	 * Iterator Class for BST
	 *
	 */
	@SuppressWarnings("unchecked")
	private static class BSTIterator implements Iterator {

		private Stack par;
	
		private BSTIterator(Node root) {
			par = new Stack();
			Node next = root;
			while (next != null) {
				par.push(next);
				next = next.left;
			} // while
		} // bst iterator

		public boolean hasNext() {
			return !par.empty();
		} // has next

		public Object next() {
			if (par.empty()) {
				throw new NoSuchElementException();
			} // if
			else {
				Node cur = (Node) par.pop();
				Node next = cur.right;
				while (next != null) {
					par.push(next);
					next = next.left;
				} // while
				return cur.val;
			} // else
		} // next

		public void remove() {
			
			throw new UnsupportedOperationException();
		} // remove

	} // iterator
	
	/**
	 * Start: Tree is Empty.
	 */
	public BSTSet() {
		root = null;
	}

	/**
	 * Retuns the height of the tree.
	 */
	@Override
	public int height() {
		return height;
	}
	
	/**
	 * Prints the the tree inOrder.
	 */
	@Override
	public String toString() {
		StringBuffer sb = new StringBuffer();
		sb.append("[");
		traverseInOrder(root, sb);
		sb.append("]");
		return sb.toString();
	} // to string

	/**
	 * Walk throw the tree and adds the values.
	 * @param t
	 * current Node
	 * @param sb
	 * StringBuffer object
	 */
	private void traverseInOrder(Node t, StringBuffer sb) {
		if (t != null) {
			traverseInOrder(t.left, sb);
			if (sb.length() > 1)
				sb.append(", ");
			sb.append(t.val);
			traverseInOrder(t.right, sb);
		} // if
	} // traverse
	
	/**
	 * Adds a new node in the Tree when the key isn't alredy in the tree.
	 */
	@SuppressWarnings("unchecked")
	@Override
	public boolean add(Comparable key) {
		Node x, current, parent;

		parent = null;
		current = root;

		// Till the end of the tree.
		while (current != null) {
			int cmpRes = key.compareTo(current.val);
			// Node is alredy in the tree => return false;
			if (cmpRes == 0)
				return false;

			parent = current;

			if (cmpRes < 0)
				current = current.left;
			else
				current = current.right;
			// if

		} // while

		// New node and initialize.

		x = new Node(key, null, null, parent);
		size++;
		
		// Set the new node at the right position or as root.
		if (parent != null) {
			int cmpRes = key.compareTo(parent.val);

			if (cmpRes < 0){
				parent.left = x;
				if(parent.right == null)
					height++;
			}
			else{
				parent.right = x;
				if(parent.left == null)
					height++;
			}
		} else{
			root = x;
			height++;
		}
		return true;
	} // add

	/**
	 * 	Searchs for a key in the tree.
	 */
	@Override
	@SuppressWarnings("unchecked")
	public boolean contains(Comparable key) {

		Node current = root;

		while (current != null) {
			int cmpRes = key.compareTo(current.val);
			// Node is alredy in the tree => return false;
			if (cmpRes == 0)
				return true;

			if (cmpRes < 0)
				current = current.left;
			else
				current = current.right;
		}

		return false;
	} // contains

	/**
	 * Returns the current size of the tree.
	 */
	@Override
	public int getSize() {
		return size;
	}

	/**
	 * Returns the BSTIterator for this tree;
	 */
	@SuppressWarnings("unchecked")
	@Override
	public Iterator iterator() {
		return new BSTIterator(root);
	}

	/**
	 * Removes a key from the tree.
	 */
	@SuppressWarnings("unchecked")
	@Override
	public boolean remove(Comparable key) {

		Node x, y, z;

		z = root;

		while (z != null) {
			int cmpRes = key.compareTo(z.val);

			if (cmpRes == 0)
				break;
			else if (cmpRes < 0)
				z = z.left;
			else
				z = z.right;
		} // while

		// Node is not in the tree.
		if (z == null)
			return false;

		if (z.left == null || z.right == null)
			y = z;
		else {
			y = z.right;

			while (y.left != null)
				y = y.left;
		}

		if (y.left != null)
			x = y.left;
		else
			x = y.right;

		if (x != null)
			x.parent = y.parent;

		if (y.parent != null)
			if (y == y.parent.left)
				y.parent.left = x;
			else
				y.parent.right = x;
		else
			root = x;

		if (y != z) {
			y.left = z.left;
			if (y.left != null)
				y.left.parent = y;
			// if

			y.right = z.right;
			if (y.right != null)
				y.right.parent = y;
			// if

			y.parent = z.parent;
			if (z.parent != null)
				if (z == z.parent.left)
					z.parent.left = y;
				else
					z.parent.right = y;
			// if
			else
				root = y;
		} // if

		size--;
		return true;
	} // remove

} // class BST
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Iterator remove()? Java Basics - Anfänger-Themen 5
M Problem mit Iterator.remove() Java Basics - Anfänger-Themen 5
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
N Kann man einen Iterator nur einmal verwenden Java Basics - Anfänger-Themen 5
N Warum Springt iterator nur in der Schleife weiter Java Basics - Anfänger-Themen 9
volcanos HashSet und Iterator -> Falsche Sortierreihenfolge ? Java Basics - Anfänger-Themen 18
J Methoden Die Reihenfolge der Iterator-Elemente umkehren Java Basics - Anfänger-Themen 3
J Methoden iterator for-schleife (hasNext() ) Java Basics - Anfänger-Themen 7
Stargirlxo Iterator + Methode Java Basics - Anfänger-Themen 10
G Java Listen und Iterator Java Basics - Anfänger-Themen 2
U Hashmap Iterator selbst implementieren Java Basics - Anfänger-Themen 10
F nur das erste Element mit iterator ausgeben Java Basics - Anfänger-Themen 5
O Iterator erneut! Java Basics - Anfänger-Themen 8
O Iterator für eine geordnete Menge Java Basics - Anfänger-Themen 134
J Doppelte Ausgabe erzeugen Iterator Java Basics - Anfänger-Themen 6
K Iterator zurückliefern Java Basics - Anfänger-Themen 8
W Eigener Iterator soll mehrdimensionales Array durchlaufen Java Basics - Anfänger-Themen 4
S Iterator einer Liste Java Basics - Anfänger-Themen 4
B Sortieren mit Iterator Java Basics - Anfänger-Themen 4
I Erste Schritte Iterator Java Basics - Anfänger-Themen 3
M Iterator funktioniert nicht Java Basics - Anfänger-Themen 5
M Iterator cannot refer to a non final... Java Basics - Anfänger-Themen 20
O Interface Iterator Java Basics - Anfänger-Themen 2
M Collections Frage Beispielprogrammierung Iterator Java Basics - Anfänger-Themen 13
M Iterator Java Basics - Anfänger-Themen 25
J Iterator Funktioniert nicht richtig in StackImplementierung Java Basics - Anfänger-Themen 3
Z Hashmap Iterator löscht nicht Java Basics - Anfänger-Themen 8
L Iterator Java Basics - Anfänger-Themen 1
K Nutzung einer Klasse die das Iterator-Interface implementiert Java Basics - Anfänger-Themen 0
K Iterator-Interface implementieren mit Exception Handlung Java Basics - Anfänger-Themen 1
M Collections Iterator und generischer Baum Java Basics - Anfänger-Themen 0
O Kleine Frage zu Iterator und Iterable Java Basics - Anfänger-Themen 6
OnDemand Iterator Interfacve Java Basics - Anfänger-Themen 23
S Iterator next() Nullpointer Java Basics - Anfänger-Themen 2
T Methoden Iterator über ArrayList Java Basics - Anfänger-Themen 3
W Iterator Java Basics - Anfänger-Themen 2
D Aufgabe: Stack mit Iterator Java Basics - Anfänger-Themen 8
R Mit iterator auf Element zugreifen Java Basics - Anfänger-Themen 2
T Collections Zugriff auf Elemente aus Iterator() Schleife Java Basics - Anfänger-Themen 4
P Casting Warning bei Iterator Java Basics - Anfänger-Themen 32
F Wie Werte einer ArrayList an einen 'Custom'-Iterator übergeben? Java Basics - Anfänger-Themen 2
J Iterator Java Basics - Anfänger-Themen 5
P ArrayList mit Iterator / Iterable ausgeben Java Basics - Anfänger-Themen 8
B Funktionsweise Iterator unklar Java Basics - Anfänger-Themen 7
A Datentypen Iterator von hinten nach vorne durchlaufen Java Basics - Anfänger-Themen 4
B Datentypen Inhalt zum Iterator wieder aufrufen? Java Basics - Anfänger-Themen 10
D Iterator schaltet nicht weiter?! Java Basics - Anfänger-Themen 5
A Problem mit Iterator Java Basics - Anfänger-Themen 2
B Türme von Hanoi - Iterator Java Basics - Anfänger-Themen 50
V Hilfe beim implementieren von Iterator Java Basics - Anfänger-Themen 5
W Collections Iterator<E> Java Basics - Anfänger-Themen 7
L Lokale Variable und Instanzvariable innerhalb Iterator Java Basics - Anfänger-Themen 8
W OOP problem mit iterator! -.- Java Basics - Anfänger-Themen 9
B Iterator und Collection Java Basics - Anfänger-Themen 11
ruutaiokwu Iterator oder .size ??? Java Basics - Anfänger-Themen 6
vandread Iterator zählt nicht hoch?! Java Basics - Anfänger-Themen 3
L Problem mit Iterator bzw. Sortierte Liste Java Basics - Anfänger-Themen 14
N HashMap mit Iterator durchlaufen Java Basics - Anfänger-Themen 11
R Iterator Liste, Verständnisproblem Java Basics - Anfänger-Themen 4
J Verschachtelte for-Schleife mit Löschen von Iterationen. Wie über Iterator abbilden? Java Basics - Anfänger-Themen 6
M Iterator Java Basics - Anfänger-Themen 15
L Implementation gesucht - ArrayList.iterator() Java Basics - Anfänger-Themen 3
M Eigener Iterator für LinkedList Java Basics - Anfänger-Themen 20
pun Iterator über ArrayList Java Basics - Anfänger-Themen 12
P Iterator.add() Java Basics - Anfänger-Themen 3
A For Schleife - Iterator wird null Java Basics - Anfänger-Themen 7
? Map und iterator Java Basics - Anfänger-Themen 11
0x7F800000 ungereimtheiten mit Iterator/ListIterator Java Basics - Anfänger-Themen 2
N "Dynamischer" Iterator Java Basics - Anfänger-Themen 21
T Liste mit Iterator auslesen Java Basics - Anfänger-Themen 11
Kr0e Iterator Java Basics - Anfänger-Themen 2
D iterator instanziieren! Java Basics - Anfänger-Themen 11
M Der Umgang mit Iterator - Wie ein Objekt aus einer ArrayList Java Basics - Anfänger-Themen 2
J ArrayList mit Iterator Java Basics - Anfänger-Themen 3
W Iterator in Queue Java Basics - Anfänger-Themen 5
A Für was Iterator ? Java Basics - Anfänger-Themen 3
M warum interface iterator verwendbar? Java Basics - Anfänger-Themen 5
O Iterator - Durchlauf "einschränken" bzw. steuern&q Java Basics - Anfänger-Themen 2
K Collection und Iterator Java Basics - Anfänger-Themen 7
Q Iterator next erstellen Java Basics - Anfänger-Themen 4
S iterator problem Java Basics - Anfänger-Themen 3
S Iterator --__-- Zugriff auf nächstes Element Java Basics - Anfänger-Themen 5
N Set + Iterator oder doch nur zu blöd API zu lesen Java Basics - Anfänger-Themen 32
R Java 5.0 neue For schleife Iterator was ist der fehler? Java Basics - Anfänger-Themen 5
N generische HashMap und Iterator Java Basics - Anfänger-Themen 2
R Iterator und HashMap Java Basics - Anfänger-Themen 10
G Probleme mit Iterator Java Basics - Anfänger-Themen 2
E umgededrehte if anweisung funzt nicht , iterator. Java Basics - Anfänger-Themen 2
A Iterator, wie funkioniert das richtig? Java Basics - Anfänger-Themen 6
S Iterator Schreibweise Java Basics - Anfänger-Themen 7
P ArrayList, iterator: Fehler in while Schleife Java Basics - Anfänger-Themen 2
T Iterator Java Basics - Anfänger-Themen 8
G Frage zur Iterator ? Java Basics - Anfänger-Themen 12
A Iterator auf anfang setzen Java Basics - Anfänger-Themen 5
blackfeet Bildfadeffekt (Halptransparenz) & iterator Java Basics - Anfänger-Themen 8
C Problem mit verschachteltem Iterator Java Basics - Anfänger-Themen 2
R Problem mit Iterator Java Basics - Anfänger-Themen 6
R Enumeration oder Iterator? Java Basics - Anfänger-Themen 2
J Klasse Iterator Java Basics - Anfänger-Themen 5
D unregelmäßige NullPointerException bei LinkedList Iterator? Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben