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

Chrome 134 schließt 14 Sicherheitslücken

Einen Bug stuft Google als besonders schwerwiegend ein. Unbefugte erhalten unter Umständen Zugriff auf Speicherinhalte…

6 Tagen ago

Firefox 136 bringt vertikale Tab-Leiste

Sie verlagert die Tabs in die neue Seitenleiste von Firefox 136. Das Update stopft auch…

7 Tagen ago

Google schließt Zero-Day-Lücken in Android

Betroffen sind alle unterstützten Android-Versionen. Den Patch für eine Zero-Day-Lücke stellt Google auch als Google…

7 Tagen ago

Technologie-Fragmentierung der Cybersecurity setzt Unternehmen zu

Studie von Palo Alto Networks: Deutsche Unternehmen konsolidieren ihre Cyberlösungen unterdurchschnittlich, vertrauen aber der KI.

2 Wochen ago

Bericht: Microsoft schaltet ab Mai 2025 Skype ab

Ein Hinweis findet sich im Code einer Vorabversion von Skype für Windows. Darin rät Microsoft…

2 Wochen ago

US-Zölle: IDC korrigiert Prognose für PC-Markt nach unten

Auch ein gesättigter Markt für Verbraucher belastet den Markt. In diesem Jahr soll die Migration…

2 Wochen ago