Difference between Iterator and Listiterator?

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


ListIterator listite = List.listIterator();

We can use Iterator to traverse a Set or a List or a Map. But ListIterator can only be used to traverse a List, it can't traverse a Set. Why?

I know that the main difference is that with iterator we can travel in only one direction but with ListIterator we can travel both directions. Are there any other differences? And any advantages of ListIterator over Iterator?

125450 次浏览

差异在 ListIterator的 Javadoc 中列出

你可以的

  • 向后迭代
  • 在任意点获得迭代器。
  • 在任意点添加新值。
  • 在这一点上设置一个新值。

这里有两个不同之处:

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

    也就是说,我们可以通过使用 Set 和 List 得到一个 Iterator 对象,参见这里:

    通过使用 Iterator,我们可以只向前方向从 Collection Object 检索元素。

    在 Iterator 的方法:

    1. hasNext()
    2. next()
    3. remove()
    Iterator iterator = Set.iterator();
    Iterator iterator = List.iterator();
  2. But we get ListIterator object only from the List interface, see here:

    where as a ListIterator allows you to traverse in either directions (Both forward and backward). So it has two more methods like hasPrevious() and previous() other than those of Iterator. Also, we can get indexes of the next or previous elements (using nextIndex() and previousIndex() respectively )

    Methods in ListIterator:

    1. hasNext()
    2. next()
    3. previous()
    4. hasPrevious()
    5. remove()
    6. nextIndex()
    7. previousIndex()
    ListIterator listiterator = List.listIterator();

    也就是说,我们不能从 Set 接口获得 ListIterator 对象。

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

迭代器是 ListIterator 的超类。

以下是它们之间的区别:

  1. 使用 iterator时,你只能向前移动,但使用 ListIterator时,你也可以在读取元素时向后移动。
  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
}

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
}

下面是迭代器和 listIterator 之间的区别

迭代器:

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

ListIterator:

boolean hasNext();
E next();
boolean hasPrevious();
E previous();
int nextIndex();
int previousIndex();
void remove();
void set(E e);
void add(E e);