微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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 YiibaiDemo {

    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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐