zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite

Antwort:

First Search: 4
Second Search: -1

Iterator

Oft möchten wir auf die Elemente einer ArrayList einzeln und der Reihe nach zugreifen. Wir könnten eine Zählschleife schreiben. Oder wir könnten ein Iterator-Objekt verwenden. Um ein Iterator-Objekt zu erhalten, verwenden wir diese Methode von ArrayList:

Iterator<E> iterator()  // gibt einen Iterator zurück

ArrayList implementiert die Schnittstelle Iterable. Die einzige Methode in dieser Schnittstelle ist iterator().

Ein Iterator-Objekt wird verwendet, um auf die Elemente einer Liste nacheinander aufzusuchen. Dabei werden nur die Zellen besucht, die Daten enthalten (so dass man sich keine Gedanken darüber machen muss, dass man das Ende der Daten überschreitet). Dies ist praktischer als eine Schleife zu schreiben. Ein Iterator-Objekt implementiert die Schnittstelle Iterator<E>, die die folgenden Methoden hat:

boolean hasNext()
  // Liefert true, wenn noch nicht alle Elemente besucht wurden.

E next()
  // Liefert das nächste Element der Liste,
  // einen Verweis auf den Typ E

void remove()
  / Entfernt das gerade von next() zurückgegebene Element aus der Liste

Hier ist ein Programm, das jedes Element in der ArrayList ausgibt:

import java.util.* ;
public class IteratorExample
{
  public static void main ( String[] args)
  {
    // Liste erzeugen und füllen
    ArrayList<String> names = new ArrayList<>();
    names.add( "Amy" );    names.add( "Bob" );
    names.add( "Chris" );  names.add( "Deb" );
    names.add( "Elaine" ); names.add( "Frank" );
    names.add( "Gail" );   names.add( "Hal" );

    // Einen Iterator für die Liste erzeugen
    Iterator<String> iter = names.iterator();

    // Den Iterator verwenden
    while ( iter.hasNext() )
      System.out.println( iter.next() );

  }
}

Mehrere Klassen in den Java-Bibliotheken implementieren die Schnittstelle Iterator<E>. Einige dieser Klassen sind kompliziert, und eine einfache Schleife kann nicht verwendet werden, um auf alle ihre Elemente zuzugreifen. Für diese Klassen ist ein Iterator, der systematisch auf jedes Element zugreift, sehr nützlich.

Verwechslungsgefahr: Achtet auf die ZWEI Schnittstellen:


Frage 17:

Ein Programm enthält z.B. den folgenden Code:

ArrayList<Integer> primes = new ArrayList<Integer>();

Angenommen, die Liste wurde mit Elementen gefüllt. Wir füllen die Lücken aus, um einen Iterator für die Liste zu erstellen:

Iterator  visitor = primes.();

zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite