Iteratoren oder Listen für Rückgabewerte in Java

Natürlich muss man manchmal mit einer Folge von Objekten mehr anfangen, als sie nur der Reihe nach zu bearbeiten. Aber wenn Sie Ihre Methode so geschrieben haben, dass sie einen Iterator zurückgibt, braucht der Aufrufer nur etwas einfachen Code wie in Listing C, um den Iterator in eine Liste umzuwandeln. Es gibt jedoch keine Möglichkeit, aus einer Liste einen Iterator zu machen, um so die Fähigkeit wiederzugewinnen, auf die ersten Daten bereits zuzugreifen, bevor die letzten erzeugt worden sind.

Ich wäre nachlässig, wenn ich nicht darauf hinweisen würde, dass es eine einfachere, aber völlig ineffektive Weise gibt, einen Iterator aus einer langsamen Datenquelle zu erzeugen. In Listing D sehen Sie eine Methode, die dieselbe Methoden-Signatur, denselben Rückgabewert und dasselbe von außen sichtbare Verhalten besitzt wie das Beispiel in Listing B. Der Unterschied liegt in der Performance und im Speicherverbrauch: Listing D packt erst alle Daten in eine Liste und erzeugt dann den Iterator. Damit bringt es all die Nachteile von Listing A mit sich, ohne dessen Vorzüge zu bieten.

Eine mögliche Verbesserung zur Iterator-Implementierung in Listing B ist ein Puffer. Die einzelne next-Variable kann durch eine LinkedList ersetzt werden, die noch nicht durch den Iterator zurückgegebene Objekte zwischenspeichert. Ein separater Worker-Thread kann den Puffer aus dem ResultSet füllen, während die next-Methode des Iterators die Daten wieder abruft. Sie könnten sogar ein High/Low-Watermark vorsehen, um sicherzustellen, dass der Puffer selber nicht zu viel Speicher verbraucht. Sie werden kaum einen Datenpfad brauchen, der so kompliziert ist, aber sollte das doch einmal der Fall sein, wird ein Iterator Ihnen gute Dienste leisten – eine Liste schafft das nicht.

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Iteratoren oder Listen für Rückgabewerte in Java

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *