ArrayList listIterator() 返回此列表中元素的列表迭代器。它是一个双向迭代器,本质上是快速失败。
默认情况下,列表迭代器返回的元素顺序正确。
listIterator()
方法被重载并有两种变体:
index
指示将由对 next 的初始调用返回的第一个元素。对 previous 的初始调用将返回具有指定 index
减一的元素。方法参数 – 从列表迭代器返回的第一个元素的索引。
方法返回 – 元素的列表迭代器。
方法throws – IndexOutOfBoundsException
– 如果索引超出范围(小于 0 或大于列表大小)。
Java 程序使用通过 listIterator()
方法获得的列表迭代器来迭代数组列表。我们将学习在向前和向后方向 迭代列表。
import java.util.ArrayList; import java.util.Arrays; import java.util.ListIterator; public class ArrayListExample { public static void main(String[] args) throws CloneNotSupportedException { ArrayList<String> alphabets = new ArrayList<>(Arrays.asList("A", "B", "C", "D")); ListIterator<String> listItr = alphabets.listIterator(); System.out.println("===========Forward========="); while(listItr.hasNext()) { System.out.println(listItr.next()); } System.out.println("===========Backward========="); while(listItr.hasPrevious()) { System.out.println(listItr.previous()); } } }
程序输出。
===========Forward========= A B C D ===========Backward========= D C B A
ListIterator 支持在迭代列表时添加和删除列表中的元素。
next()
返回的元素之前或 $ 返回的元素之后$$
方法。next()
或 previous()
方法返回的最后一个元素。import java.util.ArrayList; import java.util.Arrays; import java.util.ListIterator; public class ArrayListExample { public static void main(String[] args) throws CloneNotSupportedException { ArrayList<String> alphabets = new ArrayList<>(Arrays.asList("A", "B", "C", "D")); ListIterator<String> listItr = alphabets.listIterator(); System.out.println(listItr.next()); //A System.out.println(listItr.next()); //B listItr.add("E"); System.out.println(alphabets); //["A", "B", "E", "C", "D"] System.out.println(listItr.previous()); //E System.out.println(listItr.next()); //E System.out.println(listItr.next()); //C listItr.remove(); System.out.println(alphabets); //["A", "B", "E", "D"] System.out.println(listItr.next()); //D } }
程序输出。
A B [A, B, E, C, D] E E C D [A, B, E, D]
ListIterator
快速失败。这意味着如果我们在创建列表迭代器后修改数组列表,那么它将在 ConcurrentModificationException
或 next()
方法上抛出 previous()
称呼。
import java.util.ArrayList; import java.util.Arrays; import java.util.ListIterator; public class ArrayListExample { public static void main(String[] args) throws CloneNotSupportedException { ArrayList<String> alphabets = new ArrayList<>(Arrays.asList("A", "B", "C", "D")); ListIterator<String> listItr = alphabets.listIterator(); System.out.println(listItr.next()); //A System.out.println(listItr.next()); //B alphabets.add("E"); System.out.println(alphabets); //["A", "B", "C", "D", "E"] System.out.println(listItr.next()); //Error } }
程序输出。
A B [A, B, C, D, E] Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) at java.util.ArrayList$Itr.next(ArrayList.java:851) at com.cundage.example.ArrayListExample.main(ArrayListExample.java:22)
迭代器 | 列表迭代器 |
---|---|
可用于迭代所有集合类。 | 只能用于迭代 List 实现的类。 |
仅支持正向迭代。 | 同时支持正向和反向迭代。 |
仅支持 READ 和 DELETE 操作。 | 支持所有CRUD操作。 |
通过iterator() 方法获取 |
通过listIterator() 方法获取 |
以上就是 Java 中的 ArrayList listIterator() 方法。
快乐学习!!
更多参考:
Java ArrayList 指南
ArrayList Java 文档
ListIterator Java 文档
标签2: Java ArrayList地址:https://www.cundage.com/article/arraylist-listiterator.html