Java中迭代器和ListIterator的区别

Java中迭代器和ListIterator的区别

迭代器

Java 中的 Collection 框架中使用迭代器来逐个检索元素。它可以应用于任何 Collection 对象。通过使用迭代器,可以执行读取和删除操作。每当想要枚举所有 Collection 框架实现的接口(如 SetListQueueDeque )以及所有实现的 Map 接口类中的元素时,都必须使用迭代器。迭代器是整个集合框架唯一可用的游标。可以通过调用 Collection 接口中的 iterator() 方法来创建迭代器对象。

// Here "c" is any Collection object. itr is of
// type Iterator interface and refers to "c"\nIterator itr = c.iterator();

列表迭代器

它仅适用于 List 集合实现的类,如 arraylistlinkedlist 等。它提供双向迭代。当要枚举 List 的元素时,必须使用 ListIterator 。这个游标比迭代器有更多的功能(方法)。 ListIterator 对象可以通过调用 List 接口中的 listIterator() 方法来创建。

// Here "l" is any List object, ltr is of type
// ListIterator interface and refers to "l"\nListIterator ltr = l.listIterator();

Iterator 和 ListIterator 的区别:

区别1: Iterator 只能向前遍历,而 ListIterator 可以向前和向后遍历。
例子:

import java.io.*;
import java.util.*;

class IteratorDemo1 {
    public static void main(String[] args)
    {
        ArrayList<Integer> list = new ArrayList<Integer>();

        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        // Iterator
        Iterator itr = list.iterator();

        System.out.println("Iterator:");
        System.out.println("Forward traversal: ");
        while (itr.hasNext()){
            System.out.print(itr.next() + " ");
        }
        System.out.println();

        // ListIterator
        ListIterator i = list.listIterator();

        System.out.println("ListIterator:");
        System.out.println("Forward Traversal : ");

        while (i.hasNext()){
            System.out.print(i.next() + " ");
        }
        System.out.println();
        System.out.println("Backward Traversal : ");
        while (i.hasPrevious())
            System.out.print(i.previous() + " ");
        System.out.println();
    }
}

运行结果:

Iterator:
Forward traversal: 
1 2 3 4 5 

ListIterator:
Forward Traversal : 
1 2 3 4 5 
Backward Traversal : 
5 4 3 2 1

区别2: ListIterator 可以帮助替换元素,而 Iterator 不能。
例子:

import java.util.ArrayList;
import java.util.ListIterator;

public class geekdocsDemo {

    public static void main(String[] args) {

        ArrayList<Integer> aList  = new ArrayList<Integer>();
        aList.add(1);
        aList.add(2);
        aList.add(3);
        aList.add(4);
        aList.add(5);

        System.out.println("Elements of ArrayList: ");
        for (Integer i : aList) {
            System.out.println(i);
        }
        ListIterator<Integer> l = aList.listIterator();
        l.next();
        l.set(80000);

        System.out.println("Now the ArrayList" + " elements are: ");
        for (Integer i : aList) {
            System.out.println(i);
        }
    }
}

输出:

Elements of ArrayList: 
1
2
3
4
5

Now the ArrayList elements are: 
80000
2
3
4
5

Iterator 和 ListIterator 比较和区别

Iterator ListIterator
只能向前遍历 Collection 中存在的元素 可以向前和向后遍历 Collection 中存在的元素
帮助遍历 Map、List 和 Set 只能遍历 List 而不能遍历其他两个
使用迭代器无法获取索引 它具有 nextIndex()previousIndex() 等方法,可以在遍历 List 时随时获取元素的索引
无法修改或替换集合中存在的元素 可以在 set(E e) 的帮助下修改或替换元素
无法添加元素并引发 ConcurrentModificationException 可以随时轻松地将元素添加到集合中
Iterator 的某些方法是 next()remove()hasNext() ListIterator 的某些方法是 next()previous()hasNext()hasPrevious()add(E e)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程