>  기사  >  Java  >  Iterator에 대한 자세한 튜토리얼

Iterator에 대한 자세한 튜토리얼

Y2J
Y2J원래의
2017-05-12 09:25:321509검색

Iterator는 순회되는 객체에서 시퀀스 유형 데이터 구조의 순회 동작을 분리할 수 있는 패턴입니다. 다음으로 이 기사를 통해 Java Iterator를 공유하겠습니다_Power Node Java Academy에서 작성, 도움이 필요한 친구들은

Iterator는 순회되는 객체에서 시퀀스 유형 데이터 구조의 순회 동작을 분리할 수 있는 패턴입니다. 즉, 시퀀스의 기본 구조가 어떻게 생겼는지 신경 쓸 필요가 없습니다. 이 객체를 얻는 한,

1.Iterator

Java는 다음을 제공합니다. 특수한 반복자 객체 >Iterator, 우리는 표준 Java 반복자를 제공하기 위해 시퀀스에 대해 이 인터페이스를 구현할 수 있습니다. Iterator 인터페이스구현된 함수는 Iterator를 "사용"하는 것입니다.

문서 정의:

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는 구현 후 Iterable 인터페이스의 기능은 이 인터페이스를 구현하는 데 일반적으로 사용되는 하위 인터페이스입니다. ;, Deque, List, Queue, Set 등. 이 인터페이스의 iterator() 메서드는 표준 Iterator를 반환합니다. 성취하다. 이 인터페이스를 구현하면 개체가 Foreach 문의 대상이 될 수 있습니다. Foreach 구문을 통해 기본 시퀀스를 탐색할 수 있습니다.

Iterable 인터페이스에는 Iterator를 생성할 수 있는 iterator() 메서드가 포함되어 있으며, Iterable 인터페이스는 foreach가 시퀀스에서 이동하는 데 사용됩니다. 따라서 Iterable 인터페이스를 구현하는 클래스를 생성하는 경우 foreach 문에서 이를 사용할 수 있습니다.

문서 정의:

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

문서 정의:

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

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());
 }
 }
 }

Iterator 사용의 간단한 예

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()); 
   
    } 
  } 
 }

Iterator 인터페이스는 다양한 하위 인터페이스의 상황에 따라 기능을 확장합니다. 예를 들어 List의 반복자인 ListIterator는 다양한 List 클래스에 액세스하는 데에만 사용할 수 있습니다. ListIterator는 양방향으로 이동할 수 있습니다. Previous() 및 기타 메소드를 추가했습니다.

3. 제네릭이 있는 Iterator

Iterator는 컬렉션 클래스 구현 중 하나와 작동합니다. 클래스는 이러한 Iterator 객체를 반환할 수 있습니다. 모든 수업에 적용 가능합니다.

컬렉션 클래스(List, Set 등)에 로드할 수 있는 객체 유형이 불확실하기 때문에 컬렉션에서 꺼낼 때는 모두 Object 클래스 유형은 강제 변환을 수행하는 데 매우 번거롭습니다. 제네릭을 사용한다는 것은 로드할 컬렉션 유형을 미리 컬렉션에 알려줌으로써 유형 변환을 표시하지 않고 직접 사용할 수 있다는 의미입니다. .

4. foreach와 Iterator

의 관계는 새로운

루프입니다. add by jdk5.0 > 컬렉션 인덱스를 고려하지 않고 컬렉션의 각 요소를 처리하는 데 사용할 수 있는 구조입니다. 형식은 다음과 같습니다

for(variable:collection){ statement; }

변수

를 정의하여 컬렉션의 각 요소를 임시로 저장하고 해당 명령문(블록)을 실행합니다. 컬렉션은 배열이거나 변경 가능한 인터페이스를 구현하는 클래스 객체여야 합니다.
위의 예에서는 제네릭과 forEach를 사용합니다:

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); 
 }
 }

위의 예에서는 제네릭과 forEach를 사용합니다:

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); 
    }  
 }

보시다시피 for의 장점을 사용하세요. 각 루프 문은 더 간결하고 오류가 덜 발생한다는 점입니다. 첨자의 시작 값과 끝 값에 대해 걱정할 필요가 없습니다. forEach는 키워드가 아니며 키워드는 여전히 for이며 명령문은 iterator에 의해 구현됩니다. 이들 사이의 가장 큰 차이점은 제거() 메소드입니다. 일반적으로

호출,

삭제 및 메서드 추가는 특정 컬렉션의 메서드입니다. 예:

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初级入门视频教程

위 내용은 Iterator에 대한 자세한 튜토리얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.