最近看到了一个线程安全的list ,位于
java.util.concurrent包下面CopyOnWriteArrayList,想起来很久之前使用ArrayList踩得坑,在此记录一下:
List<String> list = new ArrayList();
list.add("A");
list.add("B");
list.add("C");
for (String str : list) {
if ("A".equals(str)) {
list.remove(str);
}
}
项目中我们可能有时候会用上面写法移除list中数据,但是运行就会发现报错,java.util.ConcurrentModificationException,
源码发现for each执行时会走如上代码,移除之后的size不等,便会报错,
要想正确移除数据可以用下面方法迭代器iterator
List<String> list = new ArrayList();
list.add("A");
list.add("B");
list.add("C");
Iterator var = list.iterator();