常常會遇到這樣一種狀況,對集合類裏的元素進行判斷,符合條件的元素保留,不符合條件的元素刪除。請注意在刪除的時候,務必使用迭代器Iterator。java
常見錯誤1:oop
ArrayList<String> list = new ArrayList<String>();
list.add("張三");
list.add("李四");
list.add("王五");
list.add("陳六");
for(String s : list){
if(s.equals("張三")){
list.remove(s);
}
}
System.out.println(list);spa
拋出異常:java.util.ConcurrentModificationExceptionrem
常見錯誤2:get
ArrayList<String> list = new ArrayList<String>();
list.add("張三");
list.add("李四");
list.add("王五");//被跳過判斷
list.add("陳六");
int loopConut = 0;//循環次數
for(int i =0;i<list.size();i++){
loopConut++;
if(list.get(i).equals("李四")){
list.remove(i);
}
}
System.out.println(loopConut);//3
System.out.println(list);//[張三, 王五, 陳六]it
注意:這種方式不會拋出異常,可是會出大事。首先,若是在for循環中執行remove操做,致使list的size數量減小,那麼被刪除元素的下一個元素則會跳過判斷。除非在刪除元素後,對i進行操做。io
正確方式:for循環
ArrayList<String> list = new ArrayList<String>();
list.add("張三");
list.add("李四");
list.add("王五");
list.add("陳六");
Iterator<String> it = list.iterator();
int loopCount = 0;//循環次數
while(it.hasNext()){
loopCount++;
String name = it.next();//必須先it.next(),才能it.remove(),
System.out.println(name);
if(name.equals("張三")){
it.remove();
}
}
System.out.println(loopCount);//4
System.out.println(list);List