Iterator와 Listiterator의 차이점은 무엇입니까?


138
Iterator ite = Set.iterator();
Iterator ite = List.iterator();

ListIterator listite = List.listIterator();

Iteratora Set또는 a List또는 a 를 횡단하는 데 사용할 수 있습니다 Map. 그러나 ListIterator를 통과하는 데만 사용할 수 있으며 a를 통과 List할 수는 없습니다 Set. 왜?

주요 차이점은 반복자를 사용하면 한 방향으로 만 ListIterator여행 할 수 있지만 양방향으로 여행 할 수 있다는 것입니다. 다른 차이점이 있습니까? 그리고 ListIterator이상의 장점 Iterator?


Peters 답변 외에도 Java에서 반복자에 대한 좋은 예제가있는 장을 읽도록 권장합니다.
Ant

답변:


150

차이점은 Javadoc for ListIterator에 나열되어 있습니다.

당신은 할 수 있습니다

  • 거꾸로 반복
  • 언제든지 반복자를 얻습니다.
  • 언제든지 새로운 가치를 추가하십시오.
  • 그 시점에서 새로운 가치를 설정하십시오.

68
그리고 당신이 그것을 할 수없는 이유 Set는 간단합니다 : "현재 포인트"가 없습니다 : 요소에는 인덱스가 없으며 다른 요소를 "앞에"또는 "뒤에"요소를 추가 할 수있는 유용한 방법이 없습니다.
Joachim Sauer 2018 년

@Peter Lawrey 는 언제든지 인덱스를 얻습니다 -previousIndex ()nextIndex () 메소드 관한 것 입니까?
gstackoverflow

2
@gstackoverflow check java.util.List # listIterator (int)
kilonet

4
@kilonet 은 어느 시점에서든 인덱스를 얻는 대신 혼란을 피하기 위해 "어떤 시점에서 반복자를 구하십시오"와 같이 표현해야합니까?
Shailesh Pratapwar

39

두 가지 차이점이 있습니다.

  1. Iterator를 사용하여 Set and List와 Map type of Object를 탐색 할 수 있습니다. ListIterator를 사용하여 List-type Objects를 탐색 할 수 있지만 Set-types of Objects는 탐색 할 수 없습니다.

    즉, Set and List를 사용하여 Iterator 객체를 얻을 수 있습니다. 여기를 참조하십시오.

    Iterator를 사용하면 Collection Object에서 정방향으로 만 요소를 검색 할 수 있습니다.

    반복자의 메소드 :

    1. hasNext()
    2. next()
    3. remove()
    Iterator iterator = Set.iterator();
    Iterator iterator = List.iterator();
  2. 그러나 List 인터페이스에서만 ListIterator 객체를 얻습니다. 여기를 참조하십시오.

    여기서 ListIterator를 사용하면 어느 방향 으로든 앞뒤로 이동할 수 있습니다. 이 같은 두 가지 이상의 방법이있다 그래서 hasPrevious()previous()반복자보다 다른. 또한 다음 또는 이전 요소의 색인을 얻을 수 있습니다 ( nextIndex()previousIndex()각각 사용)

    ListIterator의 메소드 :

    1. hasNext ()
    2. 다음()
    3. 이전()
    4. hasPrevious ()
    5. 없애다()
    6. nextIndex ()
    7. previousIndex ()
    ListIterator listiterator = List.listIterator();

    즉, Set 인터페이스에서 ListIterator 객체를 가져올 수 없습니다.

참조 : -Iterator와 ListIterator의 차이점은 무엇입니까?


39
이것은 kirankumarjava.blogspot.com/2013/06/… 에서 크게 잘라 붙여 넣은 것처럼 보입니다 . 항상 원저자를 인정해야합니다.
Cameron Skinner

25

Iterator는 ListIterator의 수퍼 클래스입니다.

차이점은 다음과 같습니다.

  1. 를 사용 iterator하면 앞으로 만 이동할 수 있지만 ListIterator요소를 읽는 동안 백 워드를 이동할 수도 있습니다.
  2. 를 사용 ListIterator하면 이송 중에 언제라도 인덱스를 얻을 수 있습니다 iterator. s 로는 불가능합니다 .
  3. 사용 iterator가능한 다음 요소 만 확인할 수 있지만 listiterator이전 및 다음 요소는 확인할 수 있습니다.
  4. 를 사용 listiterator하면 이송하는 동안 언제든지 새로운 요소를 추가 할 수 있습니다. 로 사용할 수 없습니다 iterator.
  5. 를 사용 listiterator하여 이송하는 동안 요소를 수정할 수 있습니다 iterator.

반복기 모양과 느낌 :

 public interface Iterator<E> {
    boolean hasNext();
    E next();
    void remove(); //optional-->use only once with next(), 
                         dont use it when u use for:each
    }

ListIterator 모양과 느낌 :

public interface ListIterator<E> extends Iterator<E> {
    boolean hasNext();
    E next();
    boolean hasPrevious();
    E previous();
    int nextIndex();
    int previousIndex();
    void remove(); //optional
    void set(E e); //optional
    void add(E e); //optional
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.