ArrayList listIterator() - 快速失败(Fail fast)
ListIterator
是快速失败的。
这意味着如果我们在创建列表迭代器之后修改数组列表,那么它会在 next()
或者 previous()
方法调用上抛出 ConcurrentModificationException
。
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.onitroad.example.ArrayListExample.main(ArrayListExample.java:22)
ArrayList listIterator() 返回在列表中的元素上的列表迭代器。
它是一个双向迭代器,本质上是fail-fast。
默认情况下,列表迭代器返回的元素按正确的顺序排列。
ArrayList listIterator() 方法
listIterator()
方法被重载并有两种变体:
- ListIterator<E> listIterator() - 返回列表中元素的列表迭代器。
- ListIterator<E> listIterator(int index) - 返回列表中元素的列表迭代器(以适当的顺序),从列表中的指定位置开始。指定的
index
表示初始调用 next 将返回的第一个元素。对previous 的初始调用将返回具有指定index
减1 的元素。
要从列表迭代器返回的第一个元素的方法参数索引。
方法返回元素上的列表迭代器。
如果索引超出范围(小于 0 或者大于列表大小),则方法抛出 IndexOutOfBoundsException
。
ArrayList listIterator() - 迭代
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
www. On IT Road .com
ArrayList listIterator() - 添加/删除
ListIterator 支持在我们迭代列表时添加和删除列表中的元素。
- listIterator.add(Element e) - 元素被插入到将被
next()
返回的元素之前或者将被返回到previous()
方法的元素之后。 - listIterator.remove() - 从列表中移除由
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]
日期:2020-09-17 00:09:56 来源:oir作者:oir