Eigener Iterator für LinkedList

Status
Nicht offen für weitere Antworten.

mamelinchen

Bekanntes Mitglied
Verstehe das Thema noch nicht ganz und finde auhc nicht viel dazu.

HAbe eine erste Implemtentierung gemacht, die natürlich nicht funktioniert.

Welche Sachen sollte ich beachten?

Code:
import a01.AbstractPerson;
import a01.Person;
import a02.List;

public class LinkedList implements List {

	protected Node head;
	protected Node tail;
	int size;

	public LinkedList() {
		this.tail = new Node(null, tail);
		this.head = new Node(null, tail);
		this.size = 0;
	}
	
	protected class IteratorImpl implements Iterator<Node> {
		public Node actual;

		public IteratorImpl(Node actual) {
			this.actual = actual;
		}

		public boolean hasNext() {
			return actual!=null;

		}

		public Person next() {
			return actual.getPerson();
		}

		public IteratorImpl iterator() {
			IteratorImpl iterator=new IteratorImpl(head.next);
			return iterator;
		}

	}

	protected class Node {

		public Node next;
		public Person person;

		public Node(Person person, Node next) {
			this.next = next;
			this.person = person;
		}

		public Node getNext() {
			return this.next;
		}

		public Person getPerson() {
			return this.person;
		}
	}

	public int clear() {
		int zähle = 0;
		Node node = head;
		while (node != tail) {
			zähle++;
			node = node.getNext();
		}
		head.next = tail;
		return zähle;
	}

	public Person get(int i) {
		if (i < 0) {
			throw new IndexOutOfBoundsException();
		}
		Node node = head;
		while (i-- > 0) {
			if (node.next == tail) {
				throw new IndexOutOfBoundsException();
			}
			node = node.getNext();
		}
		return node.person;
	}
[COLOR="YellowGreen"]//Mittels Iterator Liste durchlaufen und an Stelle i einfügen
Ist das richtig oder vollkommen falsch?
Sollte ich es mit iterator() machen?Aber wo wende ich den an?Speziell?[/COLOR]

	public void insert( int i,AbstractPerson person) {
		if (i <= 0) {
			throw new IndexOutOfBoundsException();
		} else {
			IteratorImpl iterate =new IteratorImpl(head);
			int stelle = 0;
			while (iterate.hasNext()) {
				stelle++;
				if (stelle == i) {
					Node g = new Node((Person) person, iterate.actual.next);
					iterate.actual.next = g;
				}

			}
		}
		size++;
	}


	public void remove(int i) {
		if (i < 0) {
			throw new IndexOutOfBoundsException();
		} else if (i == 0) {
			System.out.println("Entfernen ist nicht möglich");
		} else {
			Node node = head;
			int stelle = 0;
			while (node != tail) {
				stelle++;
				if (stelle == i) {
					node.next = node.getNext().getNext();
				}
				node = node.getNext();
			}
		}
		size--;
	}

	public void reverse() {
		int i = 0;
		Node prev = head;
		Node actualNode = head;
		Node nextNode = actualNode.next;
		while (i <= size) {
			prev = actualNode;
			actualNode = nextNode;
			nextNode = actualNode.next;
			actualNode.next = prev;
			i++;
		}
		nextNode = head;
		head = tail;
		tail = nextNode;
		tail.next = prev;
	}

	public int size() {
		return size;
	}

	public String toString() {
		String string = "[";
		Node node = head.next;
		while (node != null && node.getPerson() != null) {
			string += node.getPerson().toString();
			node = node.getNext();
			if (node != null && node.getPerson() != null) {
				string += " ; ";
			}
		}
		return string + "]";
	}
	
	public static void main(String[] args) {
		LinkedList alpha = new LinkedList();
		alpha.insert(1, new Person("Tobias", "Salomon", 1985, "12423"));
		alpha.insert(2, new Person("Melanie", "Mieritz", 1987, "10117"));
		alpha.insert(2, new Person("Antje", "Roloff", 1980, "12567"));
		alpha.insert(1, new Person("Jennifer", "Hübner", 1986, "12478"));
		System.out.println(alpha.size());
		System.out.println(alpha);
		alpha.reverse();
		System.out.println(alpha);
		System.out.println(alpha.get(2));
		alpha.remove(2);
		System.out.println(alpha);
		System.out.println(alpha.clear());
		System.out.println(alpha);
	}
}
 

mamelinchen

Bekanntes Mitglied
Habs jetzt.

Aber mein Einfügen geht nicht. Was mach ich falsch?

Code:
	public void insert(int i, AbstractPerson person,IteratorImpl iterate) {
		if (i <= 0) {
			throw new IndexOutOfBoundsException();
		} else if (head.next == tail) {
			Node nu = new Node((Person) person, tail);
			head.next = nu;
		} else {
			int stelle = 0;
			while (iterate.hasNext()) {
				stelle++;
				if (stelle == i) {
					Node g = new Node((Person) person, iterate.actual.next);
					iterate.actual.next = g;
				}
			}
		}size++;
		
	}

Dazu mein Iterator.

Code:
	protected class IteratorImpl implements Iterator<Person> {
		public Node actual;

		public IteratorImpl(Node actual) {
			this.actual = actual;
		}

		public boolean hasNext() {
			return actual!=tail;
		}
		
		public Person next() {
			if (!hasNext()) {
				throw new NoSuchElementException();
			} else {
				Person person = actual.getPerson();
				actual = actual.next;
				return person;
			}
		}
	}
	public IteratorImpl iterator() {
		return new IteratorImpl(head.next);
	}

und die Knoten von der Liste:

Code:
	public LinkedList() {
		this.tail = new Node(null, tail);
		this.head = new Node(null, tail);
		this.size = 0;
	}
 

Marco13

Top Contributor
Hab wegen der Fragewürdigen Fragestellung (keine Fehlerbeschreibung, kein compilierbarer Code) nurmal kurz draufgeschaut, aber ... wenn ein neues Element eingefügt wird, muss man auch
vorheriges.next = neues
setzen, das hab ich da jetzt nirgends gesehen...
 
S

SlaterB

Gast
dürfte doch hier sein:
> Node g = new Node((Person) person, iterate.actual.next);
> iterate.actual.next = g;

iterate.actual.next zeigt auf g, g auf das alte iterate.actual.next

ob was davon nicht geht, kann man am einfachsten wirklich zur Laufzeit testen,
vorher + nachher alle möglichen Verknüpfungen ausgeben oder debuggen
 

mamelinchen

Bekanntes Mitglied
Habs, bloss er fügt nicht an die Stelle ein wo er soll:

Code:
	public void insert(int i, AbstractPerson person, IteratorImpl iterate) {
		if (i <= 0) {
			throw new IndexOutOfBoundsException();
		} else {
			int stelle = 0;
			while (iterate.hasNext() && stelle != i) {
				stelle++;
				if (stelle == i) {
					Node g = new Node((Person) person, iterate.actual.next);
					iterate.actual.next = g;
				}
			}
		}
		size++;
	}

Beim einfügen mit der Reihenfolge und Stellen:

Code:
	alpha.insert(1, new Person("Tobias", "Salomon", 1985, "12423"),iterate);
		alpha.insert(2, new Person("Melanie", "Mieritz", 1987, "10117"),iterate);
		alpha.insert(2, new Person("Antje", "Roloff", 1980, "12567"),iterate);
		alpha.insert(1, new Person("Jennifer", "Hübner", 1986, "12478"),iterate);

Gibt er das aus:
[Jennifer Hübner 1986 12478 ; Antje Roloff 1980 12567 ; Melanie Mieritz 1987 10117 ; Tobias Salomon 1985 12423]

also total hintereinander....

Wie mach ich das ?!

Ich möchte auch meine toString mit dem Iterator durchlaufen. Was ich aber nur bekomme ist:

a07.LinkedList@a90653
a07.LinkedList@a90653??

Bei:


Code:
	public String toString([COLOR="DarkOrange"]IteratorImpl iterate[/COLOR]) {
//ist mein iterator von der Liste, auf die ich toString anwende
		String string = "[";
		while (iterate.hasNext()){
			string += iterate.next().toString();
			if (iterate.hasNext()) {
				string += " ; ";
			}
		}
		return string + "]";
	}

wobei der Iterator mit head anfängt und folglich als person null zurückgibt.

Ahhh ich seh das wieder net.:(
 
S

SlaterB

Gast
prüfe doch im Detail, was beim Einfügen passiert,
zu Beginn von insert schreibst du
System.out.println("inserte Objekt .. an Position .., kompletter Überblick über Stand der Liste: ............");

> while (iterate.hasNext() && stelle != i) {
> stelle++;

wird hier überhaupt zum nächsten Element gesprungen oder nur stelle erhöht?
auf jeden Fall genauso ein Fall fürs Loggen:
System.out.println("Schleifendurchlauf, stelle erhöht auf .., aktueller Iterator zeigt auf Element ..");

nichts bleibt verborgen in so einfachen Programmen, alles ist erklärbar mit dem einfachst-denkbaren Befehl
System.out.println()
 

mamelinchen

Bekanntes Mitglied
ja das hab ich mir auch überlegt, das passiert garnicht!

das heisst ich schreibe:

Code:
while (iterate.hasNext() && stelle != i) {
    stelle++;
    if (stelle == i) {
          Node g = new Node((Person) person, iterate.actual.next);
          iterate.actual.next = g;
    }
    [COLOR="Orange"]iterate.next();   [/COLOR] >[COLOR="YellowGreen"] //springt zum nächsten knoten und damit kann das einfügen stattfinden^^[/COLOR]
}



ja system.out.println ist ein guter freund:D


aber was bedeutet
a07.LinkedList@a90653??
 
Zuletzt bearbeitet:

Schandro

Top Contributor
a07.LinkedList@a90653
Dieser String wurde von der toString() Methode deiner Klasse LinkedList zurückgegeben. Wenn du stattdessen was anderes zurückgeben lassen willst, musst du toString() in deiner Klasse LinkedList überschreiben und was anderes zurückgeben lassen.
In der Klasse Object (von der deine Klasse LinkedList ja schlussendlich erbt) ist toString auf diese Art definiert worden (Klassenname@hashcode).
 

mamelinchen

Bekanntes Mitglied
Kann er das auch zurückgeben, wenn meine toString() der LinkedList-Klasse nicht funktioniert?

Wie oben zu sehen?

Ich hab den Fehler schon gefunden.

Ich iteriere ja auch bei toString () nicht :/

Muss ich noch ändern!
 

mamelinchen

Bekanntes Mitglied
Achjaaaaa!Is ja was andres ,klar.

Ich habs die toString()ja vorher mit Knoten gemacht .

Aber wie soll ich sonst den Iterator benutzen zum Wiedergeben der Liste?
 

ARadauer

Top Contributor
Java:
/**
     * Returns a string representation of the object. In general, the 
     * <code>toString</code> method returns a string that 
     * "textually represents" this object. The result should 
     * be a concise but informative representation that is easy for a 
     * person to read.
     * It is recommended that all subclasses override this method.
     * <p>
     * The <code>toString</code> method for class <code>Object</code> 
     * returns a string consisting of the name of the class of which the 
     * object is an instance, the at-sign character `<code>@</code>', and 
     * the unsigned hexadecimal representation of the hash code of the 
     * object. In other words, this method returns a string equal to the 
     * value of:
     * <blockquote>
     * <pre>
     * getClass().getName() + '@' + Integer.toHexString(hashCode())
     * </pre></blockquote>
     *
     * @return  a string representation of the object.
     */
    public String toString() {
	return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
so wirds standardmäßig gemacht.. will man das nicht, muss man genau die methode überschreiben...
 

Lexi

Bekanntes Mitglied
Am besten wäre es, wenn du jeder Methode die eine andere überschreibt ein "@Override" beifügst. Dann weißt du, ob du auch wirklich was überschreibst .
 
S

SlaterB

Gast
> Den kann ich ja nichtmal dort erzeugen oder doch?

den Iterator(?) dort (in der toString()-Methode?) erzeugen?
warum erzeugen, der Iterator ist doch schon da,

eindeutige Fragen, wo seid ihr..

--------

in einer toString()-Methode kann man über alles Auskunft geben, was das Objekt kennt,
über alles andere nicht,
einfaches Spiel

der Iterator kennt anscheinend nur einen Node, viel mehr gibts auch kaum bei verketteten Listen,
diesen Node könnte man in toString() ausgeben und/ oder Schritt für Schritt nach weiteren Nodes durchlaufen oder was auch immer du benötigst
 

mamelinchen

Bekanntes Mitglied
Das was ich wollte :

Code:
public String toString() {
IteratorImpl iterate=[COLOR="DarkOrchid"]this[/COLOR].iterator();
		String string = "[";
		while (iterate.hasNext()){
			string += iterate.next().toString();
			if (iterate.hasNext()) {
				string += " ; ";
			}
		}
		return string + "]";
	}
Das ich den Iterator mit DER LinkedList erzeuge und durchratter.

Das wollt ich wissen.
 
S

SlaterB

Gast
bei mehr als 1000 Elementen kann eine solche Methode spürbar langsam werden,
verwende lieber StringBuilder statt String + String,
das ist dann 100x schneller
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Eigener Iterator soll mehrdimensionales Array durchlaufen Java Basics - Anfänger-Themen 4
H String verschlüsseln - eigener Algorithmus Java Basics - Anfänger-Themen 104
D importieren eigener Klassen Java Basics - Anfänger-Themen 12
W Dez-->Binär mit eigener bit Anzahl Erkennung. Java Basics - Anfänger-Themen 3
N ArrayList in eigener Klasse erzeugen mit Zugriff Java Basics - Anfänger-Themen 7
B Eigener Validierungseditor? Java Basics - Anfänger-Themen 3
Bluedaishi Jar mit eigener JRE Java Basics - Anfänger-Themen 7
I equals (Override) mit eigener Exception (keine Runtime-Exception) Java Basics - Anfänger-Themen 9
J Threads Problem mit eigener ArrayList Java Basics - Anfänger-Themen 2
E MCLauncher eigener Client workt nicht? Java Basics - Anfänger-Themen 4
A Input/Output Datenströme schließen in eigener Methode Java Basics - Anfänger-Themen 5
J Interface ActionListener in eigener Klasse Java Basics - Anfänger-Themen 27
F Get/Post als eigener Thread mit Rückgabe Java Basics - Anfänger-Themen 5
M Messandwendung nach Zeit und eigener Eingabe Java Basics - Anfänger-Themen 4
N Schlüsselworte Bubble Sort nach eigener Ordnung Java Basics - Anfänger-Themen 8
E Compare-Funktion bei eigener Klasse Java Basics - Anfänger-Themen 4
Q ArrayList mit eigener Klasse in Java sotieren Java Basics - Anfänger-Themen 2
N BierSpiel von "Kopf bis Fuss" eigener Code...kleine Problemstellung. Java Basics - Anfänger-Themen 11
C OOP Erstellen eigener Objekte die es schon gibt "schlau"? Java Basics - Anfänger-Themen 3
V Arrays aus eigener Klasse erstellt, zuweisung aber spuckt Fehler in verbindung mit main Methode aus. Java Basics - Anfänger-Themen 3
L Eigener FilterReader Java Basics - Anfänger-Themen 12
E Mein eigener Listener (Hilfe gesucht) Java Basics - Anfänger-Themen 2
M import von eigener Klasse Java Basics - Anfänger-Themen 12
P ArrayList aus eigener Klasse "überschreibt" Werte nicht Java Basics - Anfänger-Themen 4
M xPos und yPos eigener Klassen geben lassen Java Basics - Anfänger-Themen 3
H Exit Befehl in eigener Konsole Java Basics - Anfänger-Themen 9
S Eigener InputStream, Hilfe bei read-Methode Java Basics - Anfänger-Themen 6
S Überladener Konstruktor und aufruf aus eigener Klasse Java Basics - Anfänger-Themen 2
D Klassen Problem mit Eigener Array-Klasse Java Basics - Anfänger-Themen 10
S [JUnit] eigener Testsuite Runner + Ausgabe Java Basics - Anfänger-Themen 6
G Eigener Autoboxing Datentyp Java Basics - Anfänger-Themen 3
M Eigener InputStream will nicht mit BufferedReader Java Basics - Anfänger-Themen 3
B Datentypen Probleme mit eigenem Get() bei eigener HashMap Java Basics - Anfänger-Themen 6
B OOP Eigener Event-Listener erstellen Java Basics - Anfänger-Themen 4
G Datentypen "Liste" eigener Objekte durchsuchen Java Basics - Anfänger-Themen 6
S mit eigener Klasse JTextField ändern Java Basics - Anfänger-Themen 3
N Vektor mit eigener Datenstruktur sortieren Java Basics - Anfänger-Themen 20
I Datentypen Eigener DatenTyp Java Basics - Anfänger-Themen 2
B Ordner öffnen (eigener Dateibrowser) Java Basics - Anfänger-Themen 8
B Eigener Webserver + Eigener Webbrowser Java Basics - Anfänger-Themen 7
I eigener "Abstandshalter" vs. LayoutManager Java Basics - Anfänger-Themen 6
X eigener Mergesort auf generischen Typen mit Comparator Java Basics - Anfänger-Themen 6
K Sinn eigener Exceptions Java Basics - Anfänger-Themen 11
D Container mit eigener Klasse Java Basics - Anfänger-Themen 5
B Verwenden eigener Object-Klassen Java Basics - Anfänger-Themen 9
H Eigener Button Java Basics - Anfänger-Themen 2
I Java eigener MSN Messenger schreiben Java Basics - Anfänger-Themen 3
R Event in eigener Klasse implementieren ? Java Basics - Anfänger-Themen 8
G Fortlaufende Aktualisierung bei eigener Klasse Java Basics - Anfänger-Themen 2
G IOException Problem in eigener Klasse Java Basics - Anfänger-Themen 8
B Import Problem mit eigener Klasse. Java Basics - Anfänger-Themen 8
G Eigener Parser Java Basics - Anfänger-Themen 4
T Problem mit eigener Klasse Java Basics - Anfänger-Themen 7
A eigener Explorer via Java? Java Basics - Anfänger-Themen 9
D Thread und Process Kommunikation bei eigener Console Java Basics - Anfänger-Themen 2
T Öffnen externer Datei als eigener Prozess Java Basics - Anfänger-Themen 8
G Datei aus eigener JAR-Datei verwende Java Basics - Anfänger-Themen 2
N Porblem mit dem Importieren eigener Pakete Java Basics - Anfänger-Themen 4
T ActionListener in eigener Klasse Java Basics - Anfänger-Themen 10
T ActionListener in eigener Klasse Java Basics - Anfänger-Themen 5
L ActionListener in eigener Klasse Java Basics - Anfänger-Themen 3
T Erstellen eigener packages Java Basics - Anfänger-Themen 6
G JMenuBar in eigener Klasse erstellen Java Basics - Anfänger-Themen 3
A Eigener Datentyp? Java Basics - Anfänger-Themen 39
F Eigener IP-Paket-Header Java Basics - Anfänger-Themen 15
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
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

Ähnliche Java Themen

Neue Themen


Oben