>Java >java지도 시간 >Java의 ListIterator 및 Iterator에 대한 자세한 설명 및 분석

Java의 ListIterator 및 Iterator에 대한 자세한 설명 및 분석

高洛峰
高洛峰원래의
2016-12-13 17:20:451277검색

Java 컬렉션을 사용하는 경우 Iterator를 사용해야 합니다. 그러나 Java 컬렉션에는 List, ArrayList, LinkedList 및 Vector를 사용할 때 사용할 수 있는 반복자 ListIterator도 있습니다. 이 두 반복자의 차이점은 무엇입니까? 아래에서 자세히 분석해 보겠습니다. 여기서 분명히 해야 할 것은 다음 그림과 같이 반복자가 가리키는 위치가 요소 앞의 위치라는 것입니다.

Java의 ListIterator 및 Iterator에 대한 자세한 설명 및 분석

여기서는 가정합니다. 집합 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());  } }
}


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