public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
//方法1
for (int i = 0; i <list.size(); i++) {
if(list.get(i).equals("2")||list.get(i).equals("4")||list.get(i).equals("5"))
list.remove(i);
}
//方法2
// for (int i = list.size()-1; i >= 0; i--) {
// if(list.get(i).equals("2")||list.get(i).equals("4")||list.get(i).equals("5"))
// list.remove(i);
// }
//方法3
// for(String str:list){
// if(str.equals("1")){
// list.remove(str);
// }
// }
//方法4
// Iterator<String> iterator = list.iterator();
// while (iterator.hasNext()) {
// String s = iterator.next();
// if(s.equals("2")||s.equals("4")||s.equals("5"))
// iterator.remove();
// }
System.out.println(list.toString());
}
先試方法一i遞增遍歷:結果如下:[1, 3, 5, 6],刪除數據不正確,是因為list每刪除一個元素,后面的元素會補上也就是如果刪除了下標為2的數據,下標3立馬緩沖下標2,所以導致刪除會混亂。
動腦子一想,那么i遞減后面的元素補上就和循環沒有關系了,實踐證明方法二是可以的;
方法三:增強型循環,直接報錯java.util.ConcurrentModificationException
方法四:迭代器遍歷list刪除元素是可以的,不過要注意用的是iterator的remove方法,如果用list.remove還是會報錯java.util.ConcurrentModificationException