java listiterator用法 - Iterator和Listiterator之间的区别?




3 Answers

Javadoc中列出了ListIterator中的差异

您可以

  • 向后迭代
  • 在任何时候获得迭代器。
  • 在任何时候添加一个新值。
  • 在这一点上设置一个新的价值。
iterator作用 iterator详解
Iterator ite = Set.iterator();
Iterator ite = List.iterator();

ListIterator listite = List.listIterator();

我们可以使用Iterator遍历SetListMap 。 但ListIterator只能用于遍历List ,它不能遍历Set 。 为什么?

我知道主要区别在于,使用迭代器我们只能在一个方向上移动,但使用ListIterator我们可以沿两个方向移动。 还有其他的区别吗? ListIteratorIterator优点是什么?




迭代器是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的区别

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

也就是说,我们可以使用Set和List来获得一个Iterrator对象,参见:

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

但是我们仅从List接口获得List Iterator对象,请参见:

ListIterator listite = List.listIterator();

即我们无法从Set接口获取List Iterator对象。

  1. 通过使用迭代器,我们只能从正面方向从集合对象中检索元素。

    • 作为List Iterator,它允许你在任何方向上遍历。 那就是List迭代器遍历两个方向。 所以它有另一个方法hasPrevious()previous()而不是Iterator。



Related

java list iterator set listiterator