问题

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

ListIterator listite = List.listIterator();

我们可以使用Iterator来遍历aSet或aList或aMap。但352729909只能用于遍历aList,它不能遍历aSet。为什么?

我知道主要的区别在于,使用迭代器我们只能在一个方向上行进,但是我们可以在ListIterator两个方向上行进。还有其他差异吗?和280101344的任何优点是Iterator


#1 热门回答(131 赞)

这些差异列在Javadoc forListIterator

你可以

  • 向后迭代
  • 随时获取迭代器。
  • 随时添加新值。
  • 在该点设置新值。

#2 热门回答(35 赞)

有两点不同:

  • 我们可以使用Iterator遍历Set和List以及Map类型的Objects。虽然ListIterator可用于遍历List-type对象,但不能用于Set-type of Objects。也就是说,我们可以通过使用Set和List来获取Iterator对象,请参见此处:通过使用Iterator,我们可以仅向前检索Collection Object中的元素。 Iterator中的方法:hasNext()next()remove()Iterator iterator = Set.iterator();
    Iterator iterator = List.iterator();
  • 但我们只从List接口获取ListIterator对象,请参见此处:ListIterator允许你在任何方向上进行遍历(向前和向后)。所以除了Iterator之外,还有两个方法,如hasPrevious()和previous()。此外,我们可以获取下一个或前一个元素的索引(分别使用nextIndex()和previousIndex())ListIterator中的方法:hasNext()next()previous()hasPrevious()remove()nextIndex()previousIndex()ListIterator listiterator = List.listIterator();即,我们无法从Set接口获取ListIterator对象。

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


#3 热门回答(22 赞)

Iterator是ListIterator的超类。

以下是它们之间的差异:

  • 使用迭代器,你只能向前移动,但使用ListIterator,你也可以在读取元素时移动后备词。
  • 使用ListIterator,你可以在遍历时随时获取索引,这对于迭代器是不可能的。
  • 使用迭代器,你只能检查下一个可用元素,但在listiterator中,你可以检查上一个和下一个元素。
  • 使用listiterator,你可以在遍历的任何时间点添加新元素。迭代器不可能。
  • 使用listiterator,你可以在遍历时修改元素,这对于迭代器是不可能的。
    迭代器外观:
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
}

原文链接