Iterator和Listiterator之间的区别?

jas*_*ssu 133 java iterator list set listiterator

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

ListIterator listite = List.listIterator();
Run Code Online (Sandbox Code Playgroud)

我们可以Iterator用来遍历一个Set或一个List或一个Map.但是ListIterator只能用来遍历一个List,它不能遍历一个Set.为什么?

我知道主要区别在于,使用迭代器,我们只能朝一个方向行进,但ListIterator我们可以向两个方向行进.还有其他差异吗?ListIterator超过任何优势Iterator

Pet*_*rey 147

这些差异列在Javadoc for ListIterator中

您可以

  • 向后迭代
  • 在任何时候获取迭代器.
  • 随时添加新值.
  • 在该点设置新值.

  • 并且你不能用`Set`这样做的原因很简单:没有"当前点":元素没有索引,没有任何有用的方法你可以在"之前"或"之后"添加另一个元素. (67认同)
  • @kilonet而不是**在任何时候获取索引**,是否应该像"在任何时候获取迭代器"那样措辞以避免混淆? (4认同)
  • @gstackoverflow检查java.util.List#listIterator(int) (2认同)

jai*_*eep 39

有两点不同:

  1. 我们可以使用Iterator遍历Set和List以及Map类型的Objects.虽然ListIterator可用于遍历List-type对象,但不能用于Set-type of Objects.

    也就是说,我们可以使用Set和List获取Iterator对象,请参见此处:

    通过使用Iterator,我们只能从正向收集Collection Object中的元素.

    迭代器中的方法:

    1. hasNext()
    2. next()
    3. remove()
    Iterator iterator = Set.iterator();
    Iterator iterator = List.iterator();
    Run Code Online (Sandbox Code Playgroud)
  2. 但我们只从List接口获取ListIterator对象,请参见此处:

    ListIterator允许您在任何方向上进行遍历(向前和向后).所以,它有两个方法,如hasPrevious()previous()比Iterator的其他.此外,我们可以获取下一个或前一个元素的索引(分别使用nextIndex()previousIndex())

    ListIterator中的方法:

    1. hasNext()
    2. 下一个()
    3. 以前()
    4. hasPrevious()
    5. 去掉()
    6. nextIndex()
    7. previousIndex()
    ListIterator listiterator = List.listIterator();
    Run Code Online (Sandbox Code Playgroud)

    即,我们无法从Set接口获取ListIterator对象.

参考: - Iterator和ListIterator有什么区别?

  • 这看起来很像是在http://kirankumarjava.blogspot.com/2013/06/what-is-difference-between-iterator-and.html上剪切和粘贴的.您必须始终确认原作者. (35认同)

use*_*551 25

Iterator是ListIterator的超类.

以下是它们之间的区别:

  1. 随着iterator你只能前进,但ListIterator你可以在阅读的元素也移动backword.
  2. 有了ListIterator你可以在遍历任何一点,这是不可能获得指数iterator秒.
  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
    }
Run Code Online (Sandbox Code Playgroud)

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
}
Run Code Online (Sandbox Code Playgroud)