Java ArrayList.listIterator() 方法及代码示例

获取当前列表中元素的列表迭代器(按适当的顺序).

定义

public ListIterator<E> listIterator()

public ListIterator<E> listIterator​(int index)

参数

参数类型参数名称参数描述
intindex列表迭代器要返回的第一个元素的索引(使用next()方法时)
类型参数E数组列表的元素类型

抛出的异常

IndexOutOfBoundsException index 超出索引范围(index 小于 0 或 index 大于等于 size())

说明

本方法由 List<E> 接口的 listIterator() 方法指派

重写了继承自 AbstractList<E> 类的 listIterator() 方法

注意事项

本方法返回的迭代器是快速失败(fast-fail)的: 如果在创建迭代器后的任何时间以任何方式修改列表的结构, 都必须通过迭代器自己的 remove 或 add 方法, 否则迭代器将抛出 ConcurrentModificationException. 因此, 面对并发修改, 迭代器能够快速而干净地失败, 而不是在未来不确定的时间冒着任意、非确定性行为的风险.

示例

通过数组列表获取列表迭代器

package com.yi21.arraylist;

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

public class Yi21ArraysListListIterator {

    public static void main(String[] args) {
        
        ArrayList<String> list = new ArrayList<>();
        list.add("Hello");
        list.add("World");
        ListIterator<String> iterator = list.listIterator(1);
        System.out.println("列表元素个数: " + list.size());
        //列表迭代器可以添加元素, 但是会影响到源 也就是数组列表
        iterator.add("21yi");
        System.out.println("迭代器添加元素后, 列表元素个数: " + list.size());
        iterate(iterator);

    }

    private static void iterate(ListIterator<String> iterator) {
        System.out.println("正向迭代");
        while(iterator.hasNext()) {
            System.out.println(iterator.next());
        }
        //列表迭代器可以反向迭代
        System.out.println("反向迭代");
        while(iterator.hasPrevious()) {
            System.out.println(iterator.previous());
        }
        System.out.println("正向迭代");
        while(iterator.hasNext()) {
            System.out.println(iterator.next());
        }

    }

}

执行结果为 :

列表元素个数: 2
迭代器添加元素后, 列表元素个数: 3
正向迭代
World
反向迭代
World
21yi
Hello
正向迭代
Hello
21yi
World