Tag: 并发修改

如何在不使用ConcurrentModificationException的情况下迭代使用for-each循环的同时修改Collection?

如果我使用for-each循环遍历它时修改了一个集合,它会给出ConcurrentModificationException 。 有没有解决办法?

并发修改exception

我有这一小段代码,它给了我并发修改exception。 我不明白为什么我一直这样做,即使我没有看到任何并发的修改正在进行。 import java.util.*; public class SomeClass { public static void main(String[] args) { List<String> s = new ArrayList<>(); ListIterator<String> it = s.listIterator(); for (String a : args) s.add(a); if (it.hasNext()) String item = it.next(); System.out.println(s); } }

在列表迭代期间从java.util.List中移除元素时,获取ConcurrentModificationExceptionexception?

@Test public void testListCur(){ List<String> li=new ArrayList<String>(); for(int i=0;i<10;i++){ li.add("str"+i); } for(String st:li){ if(st.equalsIgnoreCase("str3")) li.remove("str3"); } System.out.println(li); } 当我运行这个代码时,我将抛出ConcurrentModificationException。 它看起来好像当我从列表中删除指定的元素,列表不知道它的大小已经改变。 我想知道这是一个常见的问题收集和删除元素?

为什么我没有在这个例子中得到一个java.util.ConcurrentModificationException?

注意:我知道Iterator#remove()方法。 在下面的代码示例中,我不明白为什么main方法中的List.remove抛出ConcurrentModificationException ,但不在 remove方法中。 public class RemoveListElementDemo { private static final List<Integer> integerList; static { integerList = new ArrayList<Integer>(); integerList.add(1); integerList.add(2); integerList.add(3); } public static void remove(Integer toRemove) { for(Integer integer : integerList) { if(integer.equals(toRemove)) { integerList.remove(integer); } } } public static void main(String… args) { remove(Integer.valueOf(2)); Integer toRemove = Integer.valueOf(3); for(Integer integer : integerList) […]