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
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에 의해 구현됩니다. 이들 사이의 가장 큰 차이점은 제거() 메소드입니다. 일반적으로
호출, 삭제 및 메서드 추가는 특정 컬렉션의 메서드입니다. 예: 但是,如果在循环的过程中调用集合的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初级入门视频教程List list = new ArrayList();
list.add(...); list.remove(...);
위 내용은 Iterator에 대한 자세한 튜토리얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!