{"id":4336,"date":"2024-01-19T16:05:43","date_gmt":"2024-01-19T16:05:43","guid":{"rendered":"https:\/\/msgprogramator.sk\/?p=4336"},"modified":"2025-07-07T11:36:32","modified_gmt":"2025-07-07T11:36:32","slug":"java-iterator","status":"publish","type":"post","link":"https:\/\/msgprogramator.sk\/de\/java-iterator\/","title":{"rendered":"Java-Entwurfsmuster (design patterns): Iterator"},"content":{"rendered":"<p>Heute werfen wir einen Blick auf das n\u00e4chste <strong>Entwurfsmuster <\/strong> (Java <strong>design patterns<\/strong>) aus der Kategorie der Verhaltensmuster (<strong>Behavioral Patterns<\/strong>) &#8211; Iterator. Entwurfsmuster in dieser Kategorie befassen sich mit der Kommunikation <strong>(interaction<\/strong>) zwischen Objekten und ihrer Verantwortung (<strong>responsibility<\/strong>). <\/p>\n<h2>Was ist das Entwurfsmuster Iterator?<\/h2>\n<p> Iterator in der objektorientierten Programmierung bietet eine M\u00f6glichkeit, systematisch auf die Elemente eines in einem Container gespeicherten Objekts zuzugreifen und sie zu durchlaufen, ohne seine interne Darstellung zu kennen. Es trennt auch die auf die Elemente anwendbaren Algorithmen vom Container. <\/p>\n<h2>Was f\u00fcr ein Problem l\u00f6st das Entwurfsmuster Iterator?<\/h2>\n<p> Es l\u00f6st das Problem des effizienten Zugriffs auf Elemente in einer Sammlung und verbirgt gleichzeitig die Struktur dieser Sammlung. Sein Hauptziel ist es, eine einheitliche Methode zum Durchlaufen verschiedener Arten von Sammlungen bereitzustellen, ohne dass deren interne Struktur bekannt sein muss. Dieses Muster definiert ein Iterator-Interface, das standardm\u00e4\u00dfig Methoden wie <em>next()<\/em>, <em>hasNext()<\/em> usw. enth\u00e4lt. Konkrete Implementierungen dieses Interfaces werden von Klassen bereitgestellt, die Sammlungen wie Listen, Mengen, Arrays und \u00c4hnliches implementieren. <\/p>\n<h2>Beispiel einer Iterator-Implementierung in Java<\/h2>\n<p> Wir werden ein Programm zum Hinzuf\u00fcgen von Notizen erstellen und das <strong>Iterator-Designmuster<\/strong> verwenden, um zu zeigen, wie wir einfach darauf zugreifen und durch sie navigieren k\u00f6nnen. Wir werden das Interface als Template erstellen, damit es f\u00fcr jeden Datentyp verwendet werden kann. <strong><u>Iterator.java<\/u><\/strong> <\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\n\/\/ Rozhranie pre iterator\npublic interface Iterator&lt;T&gt; {\n    boolean hasNext();\n    T next();\n}<\/code><\/pre>\n<p> Das Interface <strong>Iterator <\/strong> definiert die Methoden <em>hasNext()<\/em> und <em>next()<\/em>. Die erste Methode sollte pr\u00fcfen, ob ein weiteres Element vorhanden ist, und die zweite Methode sollte das n\u00e4chste Element zur\u00fcckgeben. <strong><u>ListIterator.java <\/u><\/strong> <\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\nimport java.util.List;\n\n\/\/ Konkretny iterator pre zoznam (List)\npublic class ListIterator&lt;T&gt; implements Iterator&lt;T&gt; {\n    private List&lt;T&gt; zoznam;\n    private int pozicia;\n\n    public ListIterator(List&lt;T&gt; zoznam) {\n        this.zoznam = zoznam;\n        this.pozicia = 0;\n    }\n\n    @Override\n    public boolean hasNext() {\n        return pozicia &lt; zoznam.size();\n    }\n\n    @Override\n    public T next() {\n        if(this.hasNext())\n            return zoznam.get(pozicia++);\n        return null;\n    }\n}<\/code><\/pre>\n<p> <strong>ListIterator<\/strong> implementiert das Interface <strong>Iterator <\/strong> und bietet eine konkrete Implementierung f\u00fcr eine Liste (List). Sie beh\u00e4lt eine Referenz auf die Liste (List&lt;T &gt; und verfolgt die aktuelle Position f\u00fcr die Iteration. Die Methode <em>hasNext() <\/em> \u00fcberpr\u00fcft, ob es einen weiteren Element in der Liste gibt. Die Methode <em>next()<\/em> gibt das n\u00e4chste Element in der Liste zur\u00fcck und verschiebt die Position auf das n\u00e4chste Element. <strong><u>Notizen.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class Poznamky&lt;T&gt; {\n    private List&lt;T&gt; poznamky;\n    public Poznamky() {\n        this.poznamky = new ArrayList&lt;&gt;();\n    }\n\n    public void pridajPoznamku(T poznamka) {\n        poznamky.add(poznamka);\n    }\n\n    public Iterator&lt;T&gt; iterator() {\n        return new ListIterator&lt;&gt;(poznamky);\n    }\n}<\/code><\/pre>\n<p> Die Klasse <strong>Notes<\/strong> speichert eine Liste von Notizen (in diesem Fall vom Typ T). Die Methode <em>pridajPoznamku()<\/em> f\u00fcgt eine neue Notiz der Liste hinzu. Die Methode <em>iterator()<\/em> erstellt eine <strong>ListIterator-Instanz<\/strong> und gibt diese zur\u00fcck, um \u00fcber die Noten in der Liste zu iterieren. <strong><u>Main.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">import designpatterns.Iterator;\nimport designpatterns.Poznamky;\n\npublic class Main {\n    public static void main(String[] args) {\n        Poznamky&lt;String&gt; poznamky = new Poznamky&lt;&gt;();\n        poznamky.pridajPoznamku(&quot;Zajtra bude sne\u017ei\u0165.&quot;);\n        poznamky.pridajPoznamku(&quot;\u010coskoro bud\u00fa Vianoce.&quot;);\n        poznamky.pridajPoznamku(&quot;Treba nak\u00fapi\u0165 dar\u010deky.&quot;);\n        \/\/ Pouzitie iteratora na prechadzanie cez pridane poznamky\n        Iterator&lt;String&gt; iterator = poznamky.iterator();\n        while(iterator.hasNext()) {\n            System.out.println(iterator.next());\n        }\n    }\n}<\/code><\/pre>\n<p><strong>Main<\/strong> ist eine Client-Klasse, die die Verwendung dieses Entwurfsmusters demonstriert. Sie erstellt eine Instanz der Klasse <strong>Poznamky <\/strong> mit dem konkreten Typ <strong>String<\/strong>, f\u00fcgt einige Notizen hinzu und durchl\u00e4uft sie dann mit einem Iterator, um sie auszugeben. Die Ausgabe dieses Beispiels ist: <img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2541 size-full\" src=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/01\/vystup-z-prikladu-460-180.webp\" alt=\"Main ist eine Client-Klasse, die die Verwendung dieses Entwurfsmusters demonstriert und eine Notes-Instanz eines bestimmten String-Typs erzeugt.\" width=\"460\" height=\"180\" srcset=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/01\/vystup-z-prikladu-460-180.webp 460w, https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/01\/vystup-z-prikladu-460-180-300x117.webp 300w\" sizes=\"auto, (max-width: 460px) 100vw, 460px\" \/><\/p>\n<h2>Zusammenfassung<\/h2>\n<p> Das Entwurfsmuster <strong>Iterator<\/strong> wird standardm\u00e4\u00dfig verwendet, um eine Gruppe von Objekten in einer Datenstruktur zu durchlaufen, unabh\u00e4ngig vom spezifischen Objekttyp. Dieses Muster ist so h\u00e4ufig verwendet worden, dass es in Programmiersprachen bereits vordefinierte Klassen gibt. Iterator muss nicht nur auf das n\u00e4chste Objekt zugreifen, sondern kann auch so implementiert werden, dass er zum Beispiel in einer Baumstruktur Breiten- oder Tiefendurchl\u00e4ufe durchf\u00fchrt. Wir haben die Dateien mit dem obigen Beispiel in Form von Code vorbereitet, den du direkt in Java ausf\u00fchren kannst. Lade den <a href=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/01\/Iterator.zip\">Code Java <strong>Iterator <\/strong> hier herunter<\/a>. Wenn du als <a href=\"https:\/\/msg-life.sk\/de\/stellenangebote\/java-entwickler-senior\/\">Java-Programmierer<\/a> auf der Suche nach Arbeit bist, schau dir unsere <a href=\"https:\/\/msg-life.sk\/de\/mitarbeiter-benefits\/\">Mitarbeiterbenefits <\/a> an und reagiere auf unsere <a href=\"https:\/\/msg-life.sk\/de\/stellenangebote\/\">aktuellen Stellenangebote.<\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Was ist das Java Iterator Design Pattern und wof\u00fcr wird es verwendet? Lies unseren neuen Artikel und lade den Beispielcode herunter.<\/p>\n","protected":false},"author":14,"featured_media":2546,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[62],"tags":[],"class_list":["post-4336","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/4336","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/comments?post=4336"}],"version-history":[{"count":4,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/4336\/revisions"}],"predecessor-version":[{"id":8036,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/4336\/revisions\/8036"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media\/2546"}],"wp:attachment":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media?parent=4336"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/categories?post=4336"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/tags?post=4336"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}