ArrayList 遍历无法修改值
public class CopyOnWriteArrayListTest {public static void main(String[] args) {ArrayList<String>list = new ArrayList<>();list.add("1");list.add("2");list.add("3");list.add("4");list.add("5");Iterator<String> iterator = list.iterator();while (iterator.hasNext()) {System.out.println("list is" + list);String next = iterator.next();System.out.println(next);if (next.equals("2")) {list.remove("5");}if (next.equals("3")) {list.add("3 found");}}}}
执行结果异常
list is[1, 2, 3, 4, 5]1list is[1, 2, 3, 4, 5]2list is[1, 2, 3, 4]Exception in thread "main" java.util.ConcurrentModificationExceptionat java.util.ArrayList$Itr.checkForComodification(ArrayList.java:911)at java.util.ArrayList$Itr.next(ArrayList.java:861)at com.example.concurrent.collections.CopyOnWriteArrayListTest.main(CopyOnWriteArrayListTest.java:25)
替换成CopyOnWriteArrayList
public class CopyOnWriteArrayListTest {public static void main(String[] args) {//ArrayList<String>list = new ArrayList<>();CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList();list.add("1");list.add("2");list.add("3");list.add("4");list.add("5");Iterator<String> iterator = list.iterator();while (iterator.hasNext()) {System.out.println("list is" + list);String next = iterator.next();System.out.println(next);if (next.equals("2")) {list.remove("5");}if (next.equals("3")) {list.add("3 found");}}}}
