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

ListIterator listite = List.listIterator();

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

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

4

4 回答 4

157

差异在ListIterator的 Javadoc 中列出

你可以

  • 向后迭代
  • 在任何时候获取迭代器。
  • 在任何时候添加一个新值。
  • 在该点设置一个新值。
于 2012-06-11T10:06:41.777 回答
42

有两个区别:

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

    也就是说,我们可以通过使用 Set 和 List 来获得一个 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. 有下一个()
    2. 下一个()
    3. 以前的()
    4. hasPrevious()
    5. 消除()
    6. 下一个索引()
    7. 以前的索引()
    ListIterator listiterator = List.listIterator();

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

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

于 2013-07-30T05:49:27.720 回答
27

Iterator 是 ListIterator 的超类。

以下是它们之间的区别:

  1. 随着iterator你只能向前移动,但ListIterator你也可以在阅读元素时移动后退。
  2. 有了ListIterator你可以在遍历的任何时候获取索引,这是iterators 做不到的。
  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
}
于 2013-12-11T10:30:09.493 回答
0

以下是iterator和listIterator的区别

迭代器:

boolean hasNext();
E next();
void remove();

列表迭代器:

boolean hasNext();
E next();
boolean hasPrevious();
E previous();
int nextIndex();
int previousIndex();
void remove();
void set(E e);
void add(E e);
于 2021-01-24T07:53:57.790 回答