在写代码中经常会遇到需要在数组循环中删除数组元素的情况,但删除会导致数组长度变化。
package com.fortunedr.thirdReport; import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub List<String> list=new ArrayList<String>(); list.add("a"); list.add("bb"); list.add("a1"); list.add("a22"); //去除数组中"a"的元素 for(String st:list){ System.out.println(st); if(st.equals("a")){ list.remove(st); } } } }
运行结果是:
a Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) at java.util.ArrayList$Itr.next(ArrayList.java:851) at com.fortunedr.thirdReport.Test.main(Test.java:16)
这是运行异常
解决方法是,将数组转换为Iterator<> 并且应用Iterator的删除方法,Iterator.remove
package com.fortunedr.thirdReport; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub List<String> list=new ArrayList<String>(); list.add("a"); list.add("bb"); list.add("a1"); list.add("a22"); Iterator<String> it=list.iterator(); //去除数组中"a"的元素 while(it.hasNext()){ String st=it.next(); if(st.equals("a")){ it.remove(); } } for(String str:list){ System.out.println(str); } } }
运行结果是:
bb
a1
a22
总结:在循环中删除数组,会导致数组长度变化,这样导致出现异常java.util.ConcurrentModificationException或者数组越界的异常。
解决方式是将数组转化为Iterator,然后利用it.remove();删除数组中的元素