【发布时间】:2019-01-05 07:19:24
【问题描述】:
通过 foreach 循环迭代时,列表中的任何项目都无法删除。但是,当我们通过迭代器对其进行迭代时,可以通过迭代器的 remove() 方法将其移除。
我了解快速故障和故障安全的概念,并且还知道 Iterator 是 java 为我们提供删除选项的方式。但是想知道java提供的Iterator的remove()方法的内部实现,方便这个操作。
import java.util.*;
public class RemoveCollection {
public static void main(String[] args) {
List<String> ls = new ArrayList<String>();
ls.add("apple");
ls.add("orange");
ls.add("kiwi");
Iterator it = ls.iterator();
while(it.hasNext()) {
it.next();
//works fine and the item is removed from list
it.remove();
}
ls.add("apple");
ls.add("orange");
ls.add("kiwi");
while(it.hasNext()) {
it.next();
//throws concurrentmodification exception
ls.remove();
}
}
}
【问题讨论】:
-
提示:通常在安装JDK时,您可以选择安装Java类的源代码:在JDK的
lib文件夹中的src.zip
标签: java list collections iterator