Heim  >  Artikel  >  Java  >  Detailliertes Tutorial zu Iterator

Detailliertes Tutorial zu Iterator

Y2J
Y2JOriginal
2017-05-12 09:25:321518Durchsuche

Iterator ist ein Muster, das das Durchlaufverhalten von Datenstrukturen vom Sequenztyp von den durchquerten Objekten trennen kann. Als Nächstes werde ich Ihnen den Java-Iterator in diesem Artikel vorstellen_Kompiliert von Power Node Java Academy, Freunde in Not Als Referenz,

Iterator ist ein Muster, das das Traversierungsverhalten einer Sequenztyp-Datenstruktur vom durchlaufenden Objekt trennen kann, das heißt, wir müssen uns nicht darum kümmern, wie die zugrunde liegende Struktur der Sequenz aussieht. Solange Sie dieses Objekt erhalten, können Sie das Innere dieses Objekts mit einem Iterator durchlaufen

1.Iterator

Java bietet a Spezialisiertes Iteratorobjekt 016a84b66d09421a2bb480f64d2bf205>Iterator. Wir können diese Schnittstelle für eine Sequenz implementieren, um einen Standard-Java-Iterator bereitzustellen. Iterator-SchnittstelleDie implementierte Funktion besteht darin, einen Iterator zu „verwenden“.

Dokumentdefinition:

Package java.util;
 publicinterface Iterator<E> {
 boolean hasNext();//判断是否存在下一个对象元素
 E next();
 void remove();
 }
 Package java.util;  
 public interface Iterator<E> { 
   boolean hasNext();//判断是否存在下一个对象元素 
   E next(); 
   void remove(); 
 }

2 .Iterable

Java bietet auch eine Iterable-Schnittstelle. Die Funktion der Iterable-Schnittstelle besteht nach der Implementierung darin, einen Iterator zurückzugeben. Unsere häufig verwendeten Unterschnittstellen, die diese Schnittstelle implementieren, sind: Collection< ;E>, Deque1a4db2c2c2313771e5742b6debf617a1, List1a4db2c2c2313771e5742b6debf617a1, Queue1a4db2c2c2313771e5742b6debf617a1, Set1a4db2c2c2313771e5742b6debf617a1 usw. Die iterator()-Methode dieser Schnittstelle gibt a zurück Standard-Iterator-Implementierung. Durch die Implementierung dieser Schnittstelle können Objekte das Ziel von Foreach-Anweisungen sein. Sie können Ihre zugrunde liegende Sequenz mithilfe der Foreach-Syntax durchlaufen.

Die Iterable-Schnittstelle enthält eine iterator()-Methode, die einen Iterator generieren kann, und die Iterable-Schnittstelle wird von foreach verwendet, um sich in der Sequenz zu bewegen. Wenn Sie also eine Klasse erstellen, die die Iterable-Schnittstelle implementiert, können Sie diese in der foreach-Anweisung verwenden.

Dokumentdefinition:

Package java.lang; 
 import java.util.Iterator;
 public interface Iterable<T> {
 Iterator<T> iterator();
 }

Dokumentdefinition:

 Package java.lang;   
 import java.util.Iterator;  
 public interface Iterable<T> {  
   Iterator<T> iterator();  
 }

Ein einfaches Beispiel für die Verwendung von Iterator

 import java.util.*; 
 publicclass TestIterator { 
 public static void main(String[] args) {
 List list=new ArrayList(); 
 Map map=new HashMap(); 
 for(int i=0;i<10;i++){ 
 list.add(new String("list"+i) ); 
 map.put(i, new String("map"+i)); 
 } 
 Iterator iterList= list.iterator();//List接口实现了Iterable接口 
 while(iterList.hasNext()){ 
 String strList=(String)iterList.next(); 
 System.out.println(strList.toString()); 
 } 
 Iterator iterMap=map.entrySet().iterator(); 
 while(iterMap.hasNext()){ 
 Map.Entry strMap=(Map.Entry)iterMap.next(); 
 System.out.println(strMap.getValue());
 }
 }
 }

Verwendung von Iterator Einfaches Beispiel

import java.util.*;   
 public class TestIterator {   
  public static void main(String[] args) {   
    List list=new ArrayList();   
    Map map=new HashMap();   
    for(int i=0;i<10;i++){   
     list.add(new String("list"+i) );   
      map.put(i, new String("map"+i));   
    }   
    Iterator iterList= list.iterator();//List接口实现了Iterable接口   
     while(iterList.hasNext()){ 
   String strList=(String)iterList.next();   
      System.out.println(strList.toString());   
    }   
   Iterator iterMap=map.entrySet().iterator();   
    while(iterMap.hasNext()){   
     Map.Entry strMap=(Map.Entry)iterMap.next();   
      System.out.println(strMap.getValue()); 
   
    } 
  } 
 }

Die Schnittstelle Iterator erweitert ihre Funktionen je nach Situation in verschiedenen Unterschnittstellen, beispielsweise dem Iterator ListIterator für List, der nur für den Zugriff auf verschiedene List-Klassen verwendet werden kann. ListIterator kann sich in beide Richtungen bewegen. Previous() und andere Methoden hinzugefügt

3. Iterator funktioniert mit jeder Implementierung der Sammlungsklassen Klassen können ein solches Iterator-Objekt zurückgeben. Kann auf jede Klasse angewendet werden.

Da die Objekttypen, die in Sammlungsklassen geladen werden können (Liste, Set usw.), unsicher sind. Wenn sie aus der Sammlung entnommen werden, gehören sie alle zur

Objektklasse
-Typ, was sehr mühsam ist. Die Verwendung von Generika bedeutet, dass die Sammlung im Voraus angewiesen werden soll, den zu ladenden Sammlungstyp zu bestimmen, sodass sie direkt verwendet werden kann, ohne dass die Typkonvertierung angezeigt wird

. Es ist sehr praktisch

Die Beziehung zwischen foreach und Iterator

für jeden ist eine neue Schleife Hinzugefügt von jdk5.0 > Struktur, mit der jedes Element in einer Sammlung verarbeitet werden kann, ohne den Sammlungsindex zu berücksichtigen.

Das Format ist wie folgt

Definieren Sie eine Variable , um jedes Element in der Sammlung vorübergehend zu speichern und die entsprechende Anweisung (Block) auszuführen. Die Sammlung muss ein
Array

oder ein Klassenobjekt sein, das die änderbare Schnittstelle implementiert.
for(variable:collection){ statement; }

Das obige Beispiel verwendet Generika und forEach: Das obige Beispiel verwendet Generika und forEach:

Ja Es ist ersichtlich, dass die Der Vorteil der Verwendung der for-each-Schleifenanweisung besteht darin, dass sie prägnanter und weniger fehleranfällig ist und Sie sich nicht um den Start- und Endwert des Index kümmern müssen. forEach ist kein Schlüsselwort, das Schlüsselwort ist immer noch for und die Anweisung wird vom Iterator implementiert. Der größte Unterschied zwischen ihnen ist die Methode „remove()“. Im Allgemeinen handelt es sich beim Aufrufen von

, Löschen von
import java.util.*;
 public class TestIterator {  
 public static void main(String[] args) {
 List<String> list=new ArrayList<String> (); 
 for(int i=0;i<10;i++){ 
 list.add(new String("list"+i) ); 
 } 
 for(String str:list){
 System.out.println(str); 
 }
 }
und Hinzufügen von Methoden um Methoden bestimmter Sammlungen, zum Beispiel:

List list = new ArrayList();
list.add(...); list.remove(...);

但是,如果在循环的过程中调用集合的remove()方法,就会导致循环出错,因为循环过程中list.size()的大小变化了,就导致了错误。 所以,如果想在循环语句中删除集合中的某个元素,就要用迭代器iterator的remove()方法,因为它的remove()方法不仅会删除元素,还会维护一个标志,用来记录目前是不是可删除状态,例如,你不能连续两次调用它的remove()方法,调用之前至少有一次next()方法的调用。forEach就是为了让用iterator循环访问的形式简单,写起来更方便。当然功能不太全,所以但如有删除操作,还是要用它原来的形式。

4 使用for循环与使用迭代器iterator的对比

采用ArrayList对随机访问比较快,而for循环中的get()方法,采用的即是随机访问的方法,因此在ArrayList里,for循环较快

采用LinkedList则是顺序访问比较快,iterator中的next()方法,采用的即是顺序访问的方法,因此在LinkedList里,使用iterator较快。从数据结构角度分析,for循环适合访问顺序结构,可以根据下标快速获取指定元素.而Iterator 适合访问链式结构,因为迭代器是通过next()和Pre()来定位的.可以访问没有顺序的集合.

而使用 Iterator 的好处在于可以使用相同方式去遍历集合中元素,而不用考虑集合类的内部实现(只要它实现了 java.lang.Iterable 接口),如果使用 Iterator 来遍历集合中元素,一旦不再使用 List 转而使用 Set 来组织数据,那遍历元素的代码不用做任何修改,如果使用 for 来遍历,那所有遍历此集合的算法都得做相应调整,因为List有序,Set无序,结构不同,他们的访问算法也不一样.

【相关推荐】

1. Java免费视频教程

2. YMP在线手册

3. JAVA初级入门视频教程

Das obige ist der detaillierte Inhalt vonDetailliertes Tutorial zu Iterator. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn