java.util.ConcurrentModificationException
如果刪空了,會報上面這個異常
輸出結果如下:
remove前集合數據:a,a,b,a,a,
remove后集合數據:a,b,a,
為什么會出現這種情況?原因是集合的大小是動態變化的,在刪除第1個值為“a”的元素后,集合的大小已經發生了改變,但是i的值在刪除后繼續執行了加1操作,此時已經跳過了“a”元素后的元素(即原集合中第2個“a”元素)。
如下刪除集合中值為“a”的元素時:
import java.util.*; public class Demo { public static void main(String[] args) throws Exception { List<String> list = new ArrayList<String>(); list.add("a"); list.add("a"); list.add("b"); list.add("a"); list.add("a"); System.out.print("remove前集合數據:"); for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i)+","); } //刪除集合中值為“1”的數據 for (int i = 0; i < list.size(); i++) { if ("a".equals(list.get(i))) { list.remove(i); } } System.out.println(""); System.out.print("remove后集合數據:"); for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i)+","); } } }
解決方法:
1、在執行完remove操作后,對i的值進行減1操作,即修改后的代碼如下:
import java.util.*; public class Demo { public static void main(String[] args) throws Exception { List<String> list = new ArrayList<String>(); list.add("a"); list.add("a"); list.add("b"); list.add("a"); list.add("a"); System.out.print("remove前集合數據:"); for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i)+","); } //刪除集合中值為“a”的數據 for (int i = 0; i < list.size(); i++) { if ("a".equals(list.get(i))) { list.remove(i); i--; } } System.out.println(""); System.out.print("remove后集合數據:"); for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i)+","); } } }
2、用迭代器的方式刪除數據
import java.util.*; public class Demo { public static void main(String[] args) throws Exception { List<String> list = new ArrayList<String>(); list.add("a"); list.add("a"); list.add("b"); list.add("a"); list.add("a"); System.out.print("remove前集合數據:"); for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i)+","); } //刪除集合中值為“a”的數據 Iterator<String> iter = list.iterator(); while (iter.hasNext()) { String temp = iter.next(); if ("a".equals(temp)) { iter.remove(); } } System.out.println(""); System.out.print("remove后集合數據:"); for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i)+","); } } }