前段时间在做删除List的符合条件的元素时,使用的for增强遍历,结果出现空指针异常
到百度上搜索后,发现问题原因:
for增强遍历的原理是迭代器,而迭代器好像是不允许在遍历的过程中删除遍历对象的,如果非要删除,迭代器推荐用remove()方法
如果不想用迭代器,可以用普通的for循环,只是在删除某个元素后,下标值再减回去
还有一种方法,for循环时反向删除。。
private static List<Integer> list= new ArrayList<Integer>();
static{
list.add(1);
list.add(2);
list.add(14);
list.add(12);
list.add(5);
list.add(2);
list.add(65);
}
//方法1:使用迭代器
public static void fun1(){
Iterator<Integer> it = list.iterator();
while(it.hasNext()){
if(it.next()>10){
it.remove();
}
}
System.out.println("fun1:"+list.size());
}
//方法2:使用for循环
public static void fun2(){
for (int i = 0; i < list.size(); i++) {
if(list.get(i)>10){
list.remove(i);
i--;
}
}
System.out.println("fun2:"+list.size());
}
//方法3:使用反向for循环
public static void fun3(){
for (int i = list.size()-1; i >= 0; i--) {
if(list.get(i)>10){
list.remove(i);
}
}
System.out.println("fun3:"+list.size());
}