JAVA中LISt遍历时如何remove元素

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33369215/article/details/53198487

 
 
下面分享三个常用的方法
 
 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Review_1 {
    public static void main(String[] args){

        List<String> list = new ArrayList<String>();
        list.add("20161127");
        list.add("20161127asdf");
        list.add("20161127asdf");
        list.add("20161127asdf");
        list.add("20161127asdf");
        list.add("20161127asdf");
        list.add("20161127asdf");

        //1.i--操作
        for(int i = 0;i < list.size();i++) {
            String b = list.get(i);
            if (b.equals("20161127asdf")) {
                list.remove(i);
                i--;
            }
        }
        System.out.println(list.size());

        list.add("20161127asdf");
        list.add("20161127asdf");
        list.add("20161127asdf");
        list.add("20161127asdf");
        list.add("20161127asdf");
        list.add("20161127asdf");
        //2.反向遍历
        for(int i = list.size() - 1;i >= 0;i--){
            String b = list.get(i);
            if(b.equals("20161127asdf")){
                list.remove(i);
            }
        }
        System.out.println(list.size());

        list.add("20161127asdf");
        list.add("20161127asdf");
        list.add("20161127asdf");
        list.add("20161127asdf");
        list.add("20161127asdf");
        list.add("20161127asdf");
        //3.调用Iterator的remove()方法安全删除元素,避免异常
        Iterator<String> iter = list.iterator();
        while(iter.hasNext()){
            String b = iter.next();
            if(b.equals("20161127asdf")){
                iter.remove();
            }
        }
        System.out.println(list.size());

    }
}

Java中list集合遍历删除元素,特别要注意下发的错误方法

 
 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Review_1 {
    public static void main(String[] args){

        List<String> list = new ArrayList<String>();
        list.add("20161127");
        list.add("20161127asdf");
        list.add("20161127asdf");
        list.add("20161127asdf");
        list.add("20161127asdf");
        list.add("20161127asdf");
        list.add("20161127asdf");

        //1.i--操作
        for(int i = 0;i < list.size();i++) {
            String b = list.get(i);
            if (b.equals("20161127asdf")) {
                list.remove(i);
            }
        }
        System.out.println(list.size());
    }
}
控制台的是  4, 造成这个错误原因是因为没有全部遍历list的数据,在删除第一个符合条件的数据以后,后面的一个数据位置会提前一位,这样在下一次循环的时候,会跳过这个数据位置改变了的数据,就造成了有重复数据没有删除
 

猜你喜欢

转载自blog.csdn.net/qq_33369215/article/details/53198487
今日推荐