2012-06-11 48 views
109
Iterator ite = Set.iterator(); 
Iterator ite = List.iterator(); 

ListIterator listite = List.listIterator(); 

我們可以使用Iterator遍歷SetListMap。但ListIterator只能用於遍歷List,它不能遍歷Set。爲什麼?Iterator和Listiterator之間的區別?

我知道主要的區別在於用迭代器我們只能在一個方向上旅行,但用ListIterator我們可以往兩個方向旅行。還有其他的區別嗎? 0123k的優勢超過Iterator

+0

除了Peters答案,我建議你閱讀一篇關於在java中關於迭代器的思考,其中有所有漂亮的例子 – ant

+0

請參閱:http://www.java67.com/2016/09/5-difference- iterator-and-ListIterator-in-java.html – roottraveller

回答

124

的差異在Javadoc上市ListIterator

可以

  • 迭代向後
  • 在任何時候獲得迭代器。
  • 在任何點添加一個新值。
  • 在這一點上設置了一個新值。
+61

之所以你不能用Set來做到這一點很簡單:沒有「當前點」:元素沒有索引,沒有有用的方法您可以在另一個元素的「之前」或「之後」添加元素。 –

+0

@Peter Lawrey **在任何時候獲取索引** - 是關於方法* previousIndex()*和* nextIndex()*? – gstackoverflow

+2

@gstackoverflow檢查java.util.List#listIterator(int) – kilonet

31

有兩點不同:

  1. 我們可以使用迭代器遍歷Set和List,也地圖對象的類型。雖然可以使用ListIterator來遍歷List類型的對象,但不能用於Set-type的對象。

    也就是說,我們可以通過設置並列出獲得Iterator對象,在這裏看到:

    通過使用迭代器,我們可以檢索集合對象僅在前進方向的元素。

    方法在迭代器:

    1. hasNext()
    2. next()
    3. remove()
    Iterator iterator = Set.iterator(); 
    Iterator iterator = List.iterator();
  2. 但是,我們只能從列表界面得到的ListIterator對象,在這裏看到:

    作爲一個ListIterator允許您在任何方向(向前和向後)遍歷。所以它有另外兩種方法,如hasPrevious()previous()以外的迭代器。另外,我們可以(分別使用nextIndex()previousIndex())獲得一個或下一個元素的索引中的ListIterator

    方法:

    1. hasNext()
    2. 下一個()
    3. 以前的()
    4. hasPrevious()
    5. remove()
    6. nextIndex()
    7. previousIndex()
    ListIterator listiterator = List.listIterator();

    即,我們無法從Set接口的ListIterator對象。

參考: - What is the difference between Iterator and ListIterator ?

+30

這看起來像是從http://kirankumarjava.blogspot.com/2013/06/what-is-difference-between-iterator-and.html中剪切粘貼的。您必須始終確認原作者。 –

15

的Iterator是超一流的ListIterator的。

這裏的區別在他們之間:

  1. 隨着iterator你只能向前移動,但ListIterator你可以在閱讀元素也移動backword。
  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 
} 
1

iterator和差異的ListIterator

  1. 我們可以使用Iterator來遍歷Set和List以及Map對象的類型。但是List Iterator可以用於遍歷List類型的對象,但不能用於Set類型的對象。

也就是說,我們可以通過設置並列出獲得Iterrator對象,在這裏看到:

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

但是,我們只能從List接口獲得列表迭代器對象,在這裏看到:

ListIterator listite = List.listIterator(); 

即,我們無法從Set接口獲取List Iterator對象。

  1. 通過使用Iterator,我們只能從集合對象的正向檢索元素。

    • where List Iterator,它允許你在任一方向上遍歷。那就是List迭代器遍歷兩個方向。所以它有另一種方法hasPrevious() & previous()除了迭代器。的ListIterator超過Iterator
+1

你重複了這個問題,但你沒有真正回答它。 –

2

優勢是,我們可以在任何時間點添加元素,而使用的ListIterator遍歷列表。