迭代器和Listiterator之间的区别?


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

ListIterator listite = List.listIterator();

我们可以使用Iterator遍历a Set或a List或a Map。但是ListIterator只能用于遍历a List,不能遍历a Set。为什么?

我知道主要的区别在于,使用迭代器,我们只能在一个方向上运行,而ListIterator我们可以在两个方向上运行。还有其他区别吗?和任何优势ListIteratorIterator


除了Peters的答案,我建议您阅读有关Java迭代器的一章,其中包含所有不错的示例
ant 2012年

Answers:


150

差异在Listdocerator的Javadoc中列出

您可以

  • 向后迭代
  • 随时获取迭代器。
  • 随时添加新值。
  • 在这一点上设置一个新值。

68
不能使用a做到这一点的原因Set很简单:没有“当前点”:元素没有索引,没有任何有用的方法可以在另一个元素之前或之后添加元素。
约阿希姆·绍尔

@Peter Lawrey随时获取索引 -它与方法previousIndex()nextIndex()有关吗?
gstackoverflow

2
@gstackoverflow检查java.util.List#listIterator(int)
千位

4
@kilonet而不是在任何时候获取索引,应该将其表述为“在任何时候获取迭代器”以避免混淆吗?
Shailesh Pratapwar 2015年

39

有两个区别:

  1. 我们可以使用Iterator遍历Set和List以及Map的Object类型。虽然ListIterator可用于遍历列表类型的对象,但不能遍历对象的集类型。

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

    通过使用Iterator,我们只能从正向检索Collection对象中的元素。

    迭代器中的方法:

    1. hasNext()
    2. next()
    3. remove()
    Iterator iterator = Set.iterator();
    Iterator iterator = List.iterator();
  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();

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

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


39
看起来好像是从kirankumarjava.blogspot.com/2013/06/…剪切并粘贴了。您必须始终确认原始作者。
卡梅隆·斯金纳

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
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.