Java 컬렉션을 사용하는 경우 Iterator를 사용해야 합니다. 그러나 Java 컬렉션에는 List, ArrayList, LinkedList 및 Vector를 사용할 때 사용할 수 있는 반복자 ListIterator도 있습니다. 이 두 반복자의 차이점은 무엇입니까? 아래에서 자세히 분석해 보겠습니다. 여기서 분명히 해야 할 것은 다음 그림과 같이 반복자가 가리키는 위치가 요소 앞의 위치라는 것입니다.
여기서는 가정합니다. 집합 List는 List1, List2, List3 및 List4의 네 가지 요소로 구성됩니다. Iterator it = List.Iterator() 문을 사용할 때 iterator가 가리키는 위치는 위 그림에서 Iterator1이 가리키는 위치입니다. 문장 it.next()에서 iterator가 가리키는 위치는 이후입니다. 위 그림에서 Iterator2가 가리키는 위치로 이동합니다.
먼저 Iterator와 ListIterator의 메소드를 살펴보겠습니다.
Iterator 메서드에는 다음이 포함됩니다.
hasNext(): 반복자가 가리키는 위치 뒤에 요소가 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
next(): 다음을 반환합니다. 컬렉션에서 Iterator가 가리키는 위치 뒤에 있는 요소
remove(): 컬렉션에서 Iterator가 가리키는 위치 뒤에 있는 요소를 제거합니다.
ListIterator 반복자에 포함된 메서드는 다음과 같습니다.
add(E e): 지정된 요소를 목록에 삽입하고 삽입 위치는 반복자의 현재 위치 이전입니다.
hasNext(): 목록을 정방향으로 순회할 때 해당 요소가 있는 경우 목록 반복자 뒤에 요소가 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다
hasPrevious(): 목록을 역방향으로 탐색하고 목록 반복자 앞에 요소가 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다
next(): 목록에서 ListIterator가 가리키는 위치를 반환합니다. 다음 요소
nextIndex(): 목록에서 ListIterator가 요구하는 위치 뒤에 있는 요소의 인덱스를 반환합니다.
previous(): ListIterator가 가리키는 위치 앞의 요소를 목록에서 반환
previousIndex(): 목록에서 ListIterator의 원하는 위치 앞에 있는 요소의 인덱스를 반환
remove(): next() 또는 이전()이 반환한 마지막 요소를 목록에서 제거합니다(약간 혼란스럽습니다. 반복자를 사용한다는 뜻입니다. hasNext() 메서드를 사용할 때 ListIterator가 가리키는 위치 뒤의 요소를 삭제합니다. iterator의 hasPrevious() 메소드를 사용하여 ListIterator가 가리키는 위치 앞의 요소를 삭제합니다.)
set(E e): 목록에서 next를 제거합니다. () 또는 이전()이 반환한 마지막 요소가 변경됩니다. 지정된 요소 e
에 하나. 동일한 포인트
는 순회 프로세스를 방해하지 않고 컬렉션의 요소를 순회해야 하는 경우 두 반복자를 모두 사용할 수 있습니다.
2. 차이점
1. 다양한 사용 범위, Iterator는 모든 컬렉션, Set, List 및 Map과 이러한 컬렉션의 하위 유형에 적용될 수 있습니다. ListIterator는 List 및 해당 하위 유형에만 사용할 수 있습니다.
2. ListIterator에는 List에 객체를 추가할 수 있는 add 메서드가 있지만 Iterator는 그럴 수 없습니다.
3. ListIterator와 Iterator에는 모두 순차 역방향 순회를 구현할 수 있는 hasNext() 및 next() 메서드가 있지만 ListIterator에는 역방향(순차 순방향) 순회를 구현할 수 있는 hasPrevious() 및 Previous() 메서드가 있습니다. . 반복자는 할 수 없습니다.
4.ListIterator는 현재 인덱스의 위치를 찾을 수 있으며 nextIndex() 및 PreviousIndex()가 이를 달성할 수 있습니다. Iterator에는 이 기능이 없습니다.
5. 모두 삭제 작업을 수행할 수 있지만 ListIterator는 객체 수정을 수행할 수 있으며 set() 메서드를 사용하면 이를 수행할 수 있습니다. Iterator는 순회만 가능하며 수정할 수 없습니다.
3: Iterator 및 ListIterator 사용 예
ListIterator 사용:
package com.collection;
import java.util.LinkedList;
import java.util.List;
가져오기 java.util.ListIterator;
public class ListIteratorTest { public static void main(String[] args) { // TODO Auto-generated method stub List<String> staff = new LinkedList<>(); staff.add("zhuwei"); staff.add("xuezhangbin"); staff.add("taozhiwei"); ListIterator<String> iter = staff.listIterator(); String first = iter.next(); //删除zhuwei iter.remove(); //把zhuwei改为simei //iter.set("simei"); System.out.println("first:"+first); iter.add("xiaobai"); //遍历List元素 System.out.println("遍历List中元素,方法一:"); for(String str : staff) System.out.println(str+" "); iter = staff.listIterator(); System.out.println("遍历List中元素,方法二:"); while(iter.hasNext()) { System.out.println(iter.next()); } } }