use*_*259 2 java iterator javac
很明显,这段代码在迭代期间修改了一个列表.
public class ArrayIterator {
public static void main(String[] args) {
List<String> list = new LinkedList<>(Arrays.asList("A","B","C","D","E"));
Iterator<String> it = list.iterator();
while (it.hasNext())
{
list.remove(it.next());
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以我们得到了预期的例外
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:966)
at java.util.LinkedList$ListItr.next(LinkedList.java:888)
at ArrayIterator.main(ArrayIterator.java:15)
Run Code Online (Sandbox Code Playgroud)
为什么编译器不能对此发出警告?
java.util.ConcurrentModificationException是运行时异常.它可能(或可能不)发生.在某些情况下,您希望remove()在迭代集合时抛出此异常,但根据元素的数量和当前元素的位置,不会发生异常.
例如,以下内容不会引发异常:
List<String> list = new LinkedList<String>(Arrays.asList("A", "B", "C", "D", "E"));
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String next = it.next();
if(next.equals("D")) {
list.remove(next);
}
}
Run Code Online (Sandbox Code Playgroud)
另一方面,以下引发异常:
List<String> list = new LinkedList<String>(Arrays.asList("A", "B", "C", "D", "E"));
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String next = it.next();
if(next.equals("C")) {
list.remove(next);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
208 次 |
| 最近记录: |