public class MapRemove { public static void main(String[] args) { ArrayList<String> a=new ArrayList<String>(); a.add("1"); a.add("2"); //第1种报异常方法: for ( String temp : a) { if ("2".equals(temp)) { a.remove(temp); } } System.out.println("a====="+a); //第2种报异常方法: Iterator<String> it = a.iterator(); while(it.hasNext()) { String s = it.next(); if("2".equals(s)) { a.remove(s); } } //此时运行会报错: Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859) at java.util.ArrayList$Itr.next(ArrayList.java:831) at MapRemove.main(MapRemove.java:15) //正常不会报错的方法: Iterator<String> it = a.iterator(); while(it.hasNext()) { String s = it.next(); if("1".equals(s)) { it.remove(); } }
结论:
迭代时返回ListIterator对象,ListIterator类中提供了remove和set方法用来操作next方法或previous方法返回的元素。
Java ArrayList的元素添加移除之java.util.ConcurrentModificationException异常分析
最新推荐文章于 2024-12-22 00:18:27 发布