Java: Der Unterschied zwischen Iteratoren und arraylists
Wie würden Sie erklären, an jemanden, der gerade erst begonnen hat, Programmieren in Java, was ist der Unterschied zwischen ArrayLists und Iteratoren sind?
Warum würde ich einen iterator anstelle der Verwendung der get () - Methoden der Arraylist
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer ArrayList ist eine tatsächliche Daten-Struktur, die eine Implementierung der List-Schnittstelle. Ein Iterator ist eine Schnittstelle, die ermöglicht die Navigation durch alle Daten-Struktur (solange ein Iterator zur Verfügung, die Daten-Struktur).
In anderen Worten, eine ArrayList ist eine aktuelle Liste von Objekt-Referenzen (oder primitive) gespeichert wird, physikalisch in ein array. ArrayList ist eine "Umsetzung" der Liste interface, was bedeutet, es bietet Implementierungen aller Methoden, die anwendbar sind, zu einer Liste, wie add(object), remove(object), get(index), etc.
Iterator ist eine allgemeinere Methode für die Navigation durch eine beliebige Datenstruktur, sei es ein Satz, eine Liste, was auch immer. Ein wichtiger Punkt ist, dass es können Sie navigieren Sie durch jedes element in der Datenstruktur einmal, und dann bist du fertig. Aus der Dokumentation kann man sehen, dass Iterator schreibt zwei Methoden next() und hasNext(). next gibt das nächste element in der zugrunde liegenden Datenstruktur und hasNext lässt Sie wissen, ob es noch ein Nächstes element in der zugrunde liegenden Datenstruktur. Mehrere Datenstrukturen ArrayList enthalten, können Sie mit einem Iterator.
Gut, wie viele Schnittstellen Iterator ermöglicht es Ihnen zu tun, die gleiche Art der Sache, egal was die zugrunde liegende Implementierung. Wenn ich will, auf "iterieren" durch einige Daten, die Struktur, kann ich entweder
a) schreiben Sie code, der speziell auf die Daten-Struktur (z.B. eine ArrayList), die ich später ändern, wenn ich die Daten-Struktur, um etwas anderes (wie HashSet) oder
b) erhalten einen Iterator von der Daten-Struktur, und verwenden Sie die gleichen hasNext/nächste Technik, die funktioniert auch, wenn ich die Daten-Struktur, um etwas anderes.
FYI, wenn Sie nicht allzu vertraut mit den Worten "Schnittstelle" und "Implementierung" sollten Sie wahrscheinlich tun, eine Google-Suche nach "Java-Schnittstelle".
Einer ArrayList ist eine Besondere Art von Liste. Es ist ein Daten-Struktur, wie ein Baum oder eine Karte oder eine Liste.
Einer Iterator ist ein Beispiel für eine design-Muster zum Wandern durch eine Daten-Struktur. Sie nicht navigieren können Sie eine Liste der gleichen Weise würden Sie einen binären Baum, sondern ein Iterator bietet eine Schnittstelle, die beschreibt, was ist üblich, alle Daten der Struktur-Navigatoren.
So, dass Sie möglicherweise verwenden Sie einen Iterator, um einen Spaziergang durch eine ArrayList. Sie sind nicht die gleiche Sache. Hier ist ein navigator, der andere ist ein container.
Also warum würden Sie es vorziehen, einen Iterator über nur über die get () - Methode für ArrayList?
Nicht alle Sammlungen haben eine get () - Methode (z.B., Collection und Set-und Binär-Baum). Wenn Sie wechseln müssen, aus einer ArrayList zu einem dieser Daten Strukturen, die Sie neu schreiben müssen Sie den code, der Aufrufe von get() sowie.
Aber wenn Sie return ein Iterator-clients den code nicht haben, um zu wissen, dass Sie geändert haben-Implementierungen.
Wenn Sie eine get () verwenden Sie die Implementierung, die ist Ihnen gegeben. Wenn Sie ein Iterator-interface, können Sie die swap-Implementierungen zu tun, Dinge wie smart-proxying ohne Auswirkungen auf die Kunden.
Ist es über das ausblenden von details in Bezug auf die navigation von Kunden einer Klasse. Wenn Sie nur ArrayList könnte es nicht viel aus. Aber wenn Sie etwas gestalten die Klassen Ihre eigenen, Sie möglicherweise feststellen, dass der Iterator gibt Ihnen eine schöne Möglichkeit zur Bereitstellung von Verhalten, ohne zu verraten private details.
Abgeben diese tutorial von Sun auf, wie Sie mit Iteratoren, die auf Klassen implementieren das Collection interface (darunter natürlich, ArrayList).
Dieser kann Ihnen einige kurze hands-on-Beispiele, wie Sie verwendet werden, die möglicherweise helfen, zu visualisieren, Ihre Unterschiede.