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.

Page: 1 2 3

ZDNet.de Redaktion

Recent Posts

Wie ein Unternehmen, das Sie noch nicht kennen, eine Revolution in der Cloud-Speicherung anführt

Cubbit ist das weltweit erste Unternehmen, das Cloud-Objektspeicher anbietet. Es wurde 2016 gegründet und bedient…

5 Tagen ago

Dirty Stream: Microsoft entdeckt neuartige Angriffe auf Android-Apps

Unbefugte können Schadcode einschleusen und ausführen. Auslöser ist eine fehlerhafte Implementierung einer Android-Funktion.

5 Tagen ago

Apple meldet Umsatz- und Gewinnrückgang im zweiten Fiskalquartal

iPhones und iPads belasten das Ergebnis. Außerdem schwächelt Apple im gesamten asiatischen Raum inklusive China…

5 Tagen ago

MadMxShell: Hacker verbreiten neue Backdoor per Malvertising

Die Anzeigen richten sich an IT-Teams und Administratoren. Ziel ist der Zugriff auf IT-Systeme.

6 Tagen ago

April-Patches für Windows legen VPN-Verbindungen lahm

Betroffen sind Windows 10 und Windows 11. Laut Microsoft treten unter Umständen VPN-Verbindungsfehler auf. Eine…

6 Tagen ago

AMD steigert Umsatz und Gewinn im ersten Quartal

Server-CPUs und Server-GPUs legen deutlich zu. Das Gaming-Segment schwächelt indes.

6 Tagen ago