Die Anleitung zu Java Iterator
1. Iterator
Iterator ist eine der Möglichkeiten, Elemente einer Collection zu durchlaufen. Unten sind das die Eigenschaften von Iterator:
- Iterator garantiert keine Iteration Reihenfolge von Elementen.
- Iterator können die Elemente während der Iteration aus Collection entfernt werden, was vom Typ von Collection abhängt.
Die Hierarchie der Unter-Interface von Iterator:
Der Grund, warum Sie die Elemente einer Collection mit Iterator durchlaufen können, liegt darin, dass sich die Collection über die Interface Iterable erstreckt.
Collection Interface
// Definition of the Collection interface:
public interface Collection<E> extends Iterable<E>
// Definition of the Iterable interface:
public interface Iterable<T> {
Iterator<T> iterator();
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
default Spliterator<T> spliterator() {
return Spliterators.spliteratorUnknownSize(iterator(), 0);
}
}
Iterator Methods
boolean hasNext()
E next();
// Optional operation.
default void remove()
default void forEachRemaining(Consumer<? super E> action)
2. Examples
Mit einem Objekt Collection können Sie einen Iterator durch die Methode Collection.iterator() erstellen. Und dann mit der Methode next() über die Elemente von Iterator iterieren.
Zum Beispiel:
IteratorEx1.java
package org.o7planning.iterator.ex;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorEx1 {
public static void main(String[] args) {
// List is a subinterface of Collection.
List<String> flowers = new ArrayList<String>();
flowers.add("Tulip");
flowers.add("Daffodil");
flowers.add("Poppy");
flowers.add("Sunflower");
flowers.add("Bluebell");
Iterator<String> iterator = flowers.iterator();
while(iterator.hasNext()) {
String flower = iterator.next();
System.out.println(flower);
}
}
}
Output:
Tulip
Daffodil
Poppy
Sunflower
Bluebell
3. remove()
Während Sie die Elemente einer Collection mit einem Iterator durchlaufen, können Sie das aktuelle Element aus Collection entfernen. Mit der Methode Iterator.remove() können Sie das tun. Allerdings unterstützen nicht alle Iterator diesen Vorgang, dies hängt vom Typ der Collection ab. Wenn dies nicht unterstützt wird, wird UnsupportedOperationException ausgelöst.
// Optional Operation
public default void remove()
Z.B: Ein ArrayList<Integer> enthält die Zahlen. Wir werden seine Elemente durchlaufen und das aktuelle Element entfernen wenn es gerade ist.
Iterator_remove_ex1.java
package org.o7planning.iterator.ex;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Iterator_remove_ex1 {
public static void main(String[] args) {
// List is a subinterface of Collection.
List<Integer> years = new ArrayList<Integer>();
years.add(1998);
years.add(1995);
years.add(2000);
years.add(2006);
years.add(2021);
Iterator<Integer> iterator = years.iterator();
while(iterator.hasNext()) {
Integer current = iterator.next();
if(current % 2 ==0) {
iterator.remove(); // Remove current element.
}
}
// After remove all even numbers:
for(Integer year: years) {
System.out.println(year);
}
}
}
Output:
1995
2021
Ein Beispiel über eine Collection, deren Iteratordie Aktion Iterator.remove() nicht unterstützt.
Iterator_remove_ex2.java
package org.o7planning.iterator.ex;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class Iterator_remove_ex2 {
public static void main(String[] args) {
// Fixed-size List.
// Its Iterator does not support remove() operation.
List<Integer> years = Arrays.asList(1998, 1995, 2000, 2006, 2021);
Iterator<Integer> iterator = years.iterator();
while(iterator.hasNext()) {
Integer current = iterator.next();
if(current % 2 ==0) {
iterator.remove(); // UnsupportedOperationException!!
}
}
// After remove all even numbers:
for(Integer year: years) {
System.out.println(year);
}
}
}
Output:
Exception in thread "main" java.lang.UnsupportedOperationException: remove
at java.base/java.util.Iterator.remove(Iterator.java:102)
at org.o7planning.iterator.ex.Iterator_remove_ex2.main(Iterator_remove_ex2.java:20)
4. forEachRemaining(Consumer)
Führt die angegebene Aktion für jedes restlichen Element aus, bis alle Elemente verarbeitet wurden oder die Aktion eine Ausnahme auslöst.
public default void forEachRemaining(Consumer<? super E> action)
Zum Beispiel:
Iterator_forEachRemaining.java
package org.o7planning.iterator.ex;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Iterator_forEachRemaining {
public static void main(String[] args) {
// Set is a subinterface of Collection.
Set<String> flowers = new HashSet<String>();
flowers.add("Tulip");
flowers.add("Daffodil");
flowers.add("Poppy");
flowers.add("Sunflower");
flowers.add("Bluebell");
// Note: Iterator doesn't guarantee iteration order
Iterator<String> iterator = flowers.iterator();
String flower1 = iterator.next();
String flower2 = iterator.next();
System.out.println("Flower 1: " + flower1);
System.out.println("Flower 2: " + flower2);
System.out.println();
iterator.forEachRemaining(flower -> System.out.println(flower));
}
}
Output:
Flower 1: Poppy
Flower 2: Tulip
Daffodil
Sunflower
Bluebell
- Die Anleitung zu Java Consumer
- Die Anleitung zu Java HashSet
5. ListIterator
ListIterator ist eine Unter-Interface von Iterator. Das ist einer der Möglichkeiten, die Elemente einer List zu durchlaufen. Im Gegensatz zu Iterator unterstützt ListIterator das Durchlaufen von Elementen sowohl in Vorwärts- als auch in Rückwärtsrichtung. ListIterator unterstützt auch das Entfernen, Aktualisieren oder Einfügen eines Element bei der Iteration.
Die Anleitungen Java Collections Framework
- Die Anleitung zu Java PriorityBlockingQueue
- Die Anleitung zu Java Collections Framework
- Die Anleitung zu Java SortedSet
- Die Anleitung zu Java List
- Die Anleitung zu Java Iterator
- Die Anleitung zu Java NavigableSet
- Die Anleitung zu Java ListIterator
- Die Anleitung zu Java ArrayList
- Die Anleitung zu Java CopyOnWriteArrayList
- Die Anleitung zu Java LinkedList
- Die Anleitung zu Java Set
- Die Anleitung zu Java TreeSet
- Die Anleitung zu Java CopyOnWriteArraySet
- Die Anleitung zu Java Queue
- Die Anleitung zu Java Deque
- Die Anleitung zu Java IdentityHashMap
- Die Anleitung zu Java WeakHashMap
- Die Anleitung zu Java Map
- Die Anleitung zu Java SortedMap
- Die Anleitung zu Java NavigableMap
- Die Anleitung zu Java HashMap
- Die Anleitung zu Java TreeMap
- Die Anleitung zu Java PriorityQueue
- Die Anleitung zu Java BlockingQueue
- Die Anleitung zu Java ArrayBlockingQueue
- Die Anleitung zu Java TransferQueue
Show More