ListIterator implementieren

Status
Nicht offen für weitere Antworten.

deetee

Aktives Mitglied
Hallo,

ich habe wahrscheinlich eine etwas ungewöhnliche Implementatin von ListIterator, aber wollte einfach mal wissen, ob man das so machen kann oder wie es besser ist.

Also ich habe eine Klasse die hat ein Element _conditions als ArrayList. Die Klasse ArrayList stellt keine Methoden wie hasNext(), etc. bereit, daher wollte ich ListIterator implementieren und damit das Element _conditions durchlaufen. Gute Idee???

Jetzt habe ich noch ein Problem bei der Implementation. Und zwar arbeite ich mit einem _index Element. Das ist bestimmt auch nur suboptimal, aber naja. Jedenfalls, wenn ich mit add() Elemente hinzufüge, wird der index inkrementiert. Das mache ich, um die Java Spezifikation laut API zu ListIterator::add() einzuhalten.
Das Ding ist jetzt, habe ich erstmal eine Liste erstellt, also x-mal add() aufgerufen, dann bringt mir hasNext() natürlich false zurück, d.h. wiederum für mich, dass ich eine erstellte Liste jedesmal mit hasPrevious() beim ersten mal durchlaufen muss!

Macht das Sinn? Für mich nicht. Also wie implementiert man sowas korrekt? Hat jemand ein Beispiel?

PS: Eigentlich funktioniert meine Implementation, denke ich. Nur ist das Verhalten eben nicht allgemein erwartungsgemäß.

Code:
	private ArrayList<Condition> _conditions = new ArrayList<Condition>();
	
	private int _index = 0;
// .....
	/**
	 * Check if next() would return a {@see Condition}.
	 * 
	 * @return
	 */
	public boolean hasNext() {
		return this.getSize() > this._index ? true : false;
	}

	/**
	 * Next {@see Condition}.
	 * 
	 * @return
	 * @throws java.util.NoSuchElementException
	 */
	public Object next() throws NoSuchElementException {
		if (this.hasNext()) {
			Condition returnCond = (Condition) this._conditions.get(this._index);

			this._index++;
			
			return returnCond;
		} else {
			throw new NoSuchElementException();
		}
	}

	/**
	 * Check if previous() would return a {@see Condition}.
	 * 
	 * @return
	 */
	public boolean hasPrevious() {
		return 1 <= this._index ? true : false;
	}

	/**
	 * Previous {@see Condition}.
	 * 
	 * @return
	 * @throws java.util.NoSuchElementException
	 */
	public Object previous() throws NoSuchElementException {
		if (this.hasPrevious()) {
			Condition returnCond = (Condition) this._conditions.get(--this._index);
			
			return returnCond;
		} else {
			throw new NoSuchElementException();
		}
	}

	/**
	 * Index of {@see Condition} would be returned by next(). Or list size if there is no next element.
	 * 
	 * @return Index or list size if cursor is at end of list.
	 */
	public int nextIndex() {
		if (this.hasNext()) {
			return this._index;
		} else {
			return this.getSize();
		}
	}

	/**
	 * Index of {@see Condition} would be returned by previous(). Or -1 if there is no previous element.
	 * 
	 * @return Index or -1 if cursor is at beginning of the list.
	 */
	public int previousIndex() {
		if (this._index == 0) {
			return -1;
		} else {
			return this._index-1;
		}
	}

	/**
	 * NOTE:
	 * Not supported yet.
	 * 
	 * @throws java.lang.UnsupportedOperationException
	 */
	public void remove() throws UnsupportedOperationException {
		throw new UnsupportedOperationException("Not supported yet.");
	}

	/**
	 * NOTE:
	 * Not supported yet.
	 * 
	 * @param e
	 * @throws java.lang.UnsupportedOperationException
	 */
	public void set(Object e) throws UnsupportedOperationException {
		throw new UnsupportedOperationException("Not supported yet.");
	}

	/**
	 * Add {@see Condition} e to the list.
	 * 
	 * NOTE:
	 * Argument "e" has to be an instance of {@see Condition}.
	 * 
	 * @param e Instance of {@see Condition}. Otherwise exception will be thrown.
	 * @throws java.lang.IllegalArgumentException
	 */
	public void add(Object e) throws IllegalArgumentException {
		if (e instanceof Condition) {
			if (this._conditions.isEmpty()) {
				this._conditions.add(0, (Condition) e);
			} else {
				this._conditions.add(this._index, (Condition) e);
			}
			this._index++;
		} else {
			throw new IllegalArgumentException();
		}
	}
 
M

maki

Gast
Also ich habe eine Klasse die hat ein Element _conditions als ArrayList. Die Klasse ArrayList stellt keine Methoden wie hasNext(), etc. bereit, daher wollte ich ListIterator implementieren und damit das Element _conditions durchlaufen. Gute Idee???
Warum nicht die Methode listIterator() nutzen?

http://java.sun.com/j2se/1.5.0/docs/api/java/util/AbstractList.html#listIterator()

Ps:
Hier noch das Collections TUtorial von Bloch: http://java.sun.com/docs/books/tutorial/collections/index.html
 

Ebenius

Top Contributor
Nur so allgemein: Es ergibt nicht so viel Sinn. Du hast auch die Iteratoren (ListIterator ist ja nur eine Erweiterung von Iterator) noch nicht ganz richtig verstanden. Ich finde's trotzdem gut, dass Du Dich damit auseinander setzt und Dir was ausdenkt. So lernt man's.

Besonders in Java lohnt der Blick in die API-Documentation. Wenn Du eben bspw. einen ListIterator für eine Collection suchst, dann ist der erste Schritt: API-Doc öffnen, suchen nach "iterator".

Achja: Variablen (egal ob fields oder locals) schreibt man in Java ohne Unterstrich.

Viel Spaß beim weiter lernen...

... wünscht Ebenius.
 
G

Guest

Gast
maki hat gesagt.:
Warum nicht die Methode listIterator() nutzen?

http://java.sun.com/j2se/1.5.0/docs/api/java/util/AbstractList.html#listIterator()
Oh, das hab ich übersehen, werde ich jetzt auch nutzen.

Danke für eure Antworten.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Collections ListIterator gibt Inhalt von ArrayList nicht aus Allgemeine Java-Themen 3
R ListIterator über mehrere Arrays Allgemeine Java-Themen 13
F ListIterator (next & previous methoden) Allgemeine Java-Themen 5
E Einfache Frage zu ListIterator Allgemeine Java-Themen 10
L Buchungssystem implementieren Allgemeine Java-Themen 2
M Kann man Annotationen auf Klassen einschränken die ein Interface implementieren? Allgemeine Java-Themen 1
MiMa Was sollte man ins JavaDoc implementieren?? Allgemeine Java-Themen 17
L Generator für einen Parser implementieren Allgemeine Java-Themen 13
L Template Engine entwerfen und implementieren Allgemeine Java-Themen 4
D OOP Gemeinsamen ID-Raum für zwei Klassen implementieren Allgemeine Java-Themen 7
P BruteForce Ansatz implementieren Allgemeine Java-Themen 32
A Breitensuche mit Hop-Distanzen in Java - Wie implementieren? Allgemeine Java-Themen 4
M Maven Deutsche Post API implementieren Allgemeine Java-Themen 2
S Eclipse Probleme beim Implementieren / Ausführen von jUnit 5-Test Suites Allgemeine Java-Themen 14
N Best Practice Allgemeines Verhalten für ein Interface implementieren? Allgemeine Java-Themen 7
K Geschätze Zeit implementieren Allgemeine Java-Themen 14
B Live Search implementieren Allgemeine Java-Themen 4
S Threads Kann mir jemand helfen eine parallele Hilfsklasse zu implementieren..? Allgemeine Java-Themen 3
T Generisch implementieren Allgemeine Java-Themen 31
J Wie implementieren, Frge an die Erfahrenen... Allgemeine Java-Themen 7
M Interface einer Library implementieren Allgemeine Java-Themen 3
F Schlüsselworte RSA Verschlüsselung implementieren Allgemeine Java-Themen 5
H Copy Paste implementieren ausserhalb des Programms? Allgemeine Java-Themen 2
D Aufgabe: Schnittstelle und Proxy implementieren Allgemeine Java-Themen 2
B Best Practice HTML Output Optimal implementieren Allgemeine Java-Themen 3
I Mehrfaches Implementieren eines generischen Interface Allgemeine Java-Themen 9
DStrohma In abstrakter Klasse Konstruktor von Instanz implementieren Allgemeine Java-Themen 11
X Modalität von JDialog nachträglich in JFrame implementieren? Allgemeine Java-Themen 8
O Plugin perfomrant implementieren Allgemeine Java-Themen 12
P InterfaceMethoden nicht implementieren Allgemeine Java-Themen 5
C Hilfe bei Adressbuch-Programmierung, wie am Besten mit JList implementieren Allgemeine Java-Themen 2
A RandomAccessFile - "insert" implementieren? Allgemeine Java-Themen 4
nrg Wie würdet ihr eine "Dauerschnittstelle" implementieren? Allgemeine Java-Themen 5
T Von JComponent erben und Set implementieren Allgemeine Java-Themen 2
D Wozu runnable implementieren? Allgemeine Java-Themen 3
D PriorityQueue selbst implementieren Allgemeine Java-Themen 15
E Wie Assoziationen implementieren in Java Allgemeine Java-Themen 22
B mathematische Formeln, umformungen nicht einzeln implementieren Allgemeine Java-Themen 6
J Undo auf eine ArrayList implementieren Allgemeine Java-Themen 3
A feststellen, welche Klassen ein Interface implementieren Allgemeine Java-Themen 3
B Generisches Singleton implementieren Allgemeine Java-Themen 12
T Interface "on-the-fly" implementieren? Allgemeine Java-Themen 3
G Interface - Klassen implementieren das - Reflection ok? Allgemeine Java-Themen 4
G Interface mehrfach implementieren Allgemeine Java-Themen 5
@ zur Laufzeit Interface aus jar implementieren? Allgemeine Java-Themen 5
MQue Vector implementieren Allgemeine Java-Themen 2
MQue Interface implementieren Allgemeine Java-Themen 7
P Liste von Klassen die ein Interface implementieren speichern Allgemeine Java-Themen 12
MQue Methode aus run() aufrufen bzw. implementieren Allgemeine Java-Themen 5
G Collections als Array implementieren Allgemeine Java-Themen 2
P Page Rank Algorithmus implementieren Allgemeine Java-Themen 7
R Interface mittels Reflection implementieren Allgemeine Java-Themen 8
N 2 Interfaces mit Methoden selber Signatur implementieren Allgemeine Java-Themen 5
C Implementieren einer Schnittstelle (Interface), Ausnahmen Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben