list数据删除有好几种
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是Fail-Fast机制
方法四:迭代器遍历list删除元素是可以的,不过要注意用的是iterator的remove方法,如果用list.remove还是会报错java.util.ConcurrentModificationException