Iterator和Listiterator之间的区别?

时间:2012-06-11 10:02:04

标签: java list iterator set listiterator

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

ListIterator listite = List.listIterator();

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

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

5 个答案:

答案 0 :(得分:143)

差异在ListIterator

的Javadoc中列出

你可以

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

答案 1 :(得分:38)

有两点不同:

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

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

    通过使用Iterator,我们只能从正向收集Collection Object中的元素。

    迭代器中的方法:

    1. hasNext()
    2. next()
    3. remove()
    4. Iterator iterator = Set.iterator();
      Iterator iterator = List.iterator();
    5. 但我们只从List界面获取ListIterator对象,请参见:

      其中ListIterator允许您在任一方向上进行遍历(向前和向后)。因此除了Iterator之外,它还有两个方法,如hasPrevious()previous()。此外,我们可以获取下一个或前一个元素的索引(分别使用nextIndex()previousIndex()

      ListIterator中的方法:

      1. hasNext()
      2. 下()
      3. 先前()
      4. hasPrevious()
      5. 删除()
      6. nextIndex()
      7. previousIndex()
      8. ListIterator listiterator = List.listIterator();

        即,我们无法从Set界面获取ListIterator对象。

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

答案 2 :(得分:24)

  

Iterator是ListIterator的超类。

以下是它们之间的区别:

  1. 使用iterator,您只能向前移动,但使用ListIterator,您也可以在阅读元素时移动后备词。
  2. 使用ListIterator,您可以在遍历时随时获取索引,这是iterator s无法实现的。
  3. 使用iterator,您只能检查下一个可用元素,但在listiterator中,您可以检查上一个和下一个元素。
  4. 使用listiterator,您可以在任何时间点添加新元素,同时遍历。 iterator无效。
  5. 使用listiterator,您可以在遍历时修改元素,这对于iterator是不可能的。
  6. 迭代器外观:

     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
    }
    

答案 3 :(得分:2)

ListIterator优于Iterator的优点是我们可以在使用ListIterator遍历列表时随时添加元素。

答案 4 :(得分: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);