关于从集合List中移除元素

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

当我们想从List集合中移除某些元素的时候,一般会想到List集合中的remove方法,所以有的人会起初使用如下的方式从集合中移除元素:

 List<Integer> listInteger = new ArrayList<Integer>();
        listInteger.add(1);
        listInteger.add(2);
        listInteger.add(3);
        listInteger.add(4);
        System.out.println(listInteger);
        for(Integer i:listInteger){
            if(i == 1  ||  i == 3){
                listInteger.remove(i);
            }
        }
        System.out.println(listInteger);

上面的代码表示在一个listInteger集合中,添加四个元素,然后循环该集合,如果元素的值为1或者3(此处存在自动拆箱将Integer拆箱为int类型做比较)就需要移除掉该元素从集合中,但是这种做法得不到效果反而会报错,异常信息如下所示:

java.util.ConcurrentModificationException
	at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1042)
	at java.base/java.util.ArrayList$Itr.next(ArrayList.java:996)
	at com.java.lee.ReferenceTest.main(ReferenceTest.java:39)

出现这个错误的原因是因为移除元素的方式不对,那么如何解决从List中移除元素这种问题呢?

下面给出两种解决方法:

方法一:将要移除的元素放到一个新的List集合中,然后从原有的集合中调用removeAll(Collection<?> c)方法 这样可以成功移除,示例代码如下:

 List<Integer> listInteger = new ArrayList<Integer>();
        listInteger.add(1);
        listInteger.add(2);
        listInteger.add(3);
        listInteger.add(4);
        System.out.println(listInteger);
        List<Integer> removeList = new ArrayList<Integer>();
        for(Integer i:listInteger){
            if(i == 1  ||  i == 3){
                //listInteger.remove(i);
                removeList.add(i);
            }
        }
        listInteger.removeAll(removeList);
        System.out.println(listInteger);

需要注意的是上述的removeAll方法的参数不可以为null,所以如果要使用该方法首先判断一下参数否为为removeList!=null && removeList.size()>0

运行结果如下所示:

[1, 2, 3, 4]
[2, 4]

方法二:使用Iterator来进行迭代,在该迭代中使用remove()方法,示例代码如下:

List<YmVo> list = new ArrayList<YmVo>();
        YmVo vo = new YmVo();
        vo.setYmzl("01");
        vo.setYmjc("1");
        list.add(vo);
        YmVo vo1 = new YmVo();
        vo1.setYmzl("02");
        vo1.setYmjc("1");
        list.add(vo1);
        for (YmVo v:list) {
            System.out.print(v.getYmzl()+ " ");
        }
        System.out.println();
        System.out.println("--------------------------------");
        for (Iterator<YmVo> iter = list.listIterator(); iter.hasNext(); ) {
            YmVo a = iter.next();
            if ("01".equals(a.getYmzl())) {
                iter.remove();
            }
        }
        for (YmVo v:list) {
            System.out.println(v.getYmzl()+ " ");
        }
public class YmVo {
   
    private String ymzl;

   
    private String ymjc;

    public String getYmzl() {
        return ymzl;
    }

    public void setYmzl(String ymzl) {
        this.ymzl = ymzl;
    }

    public String getYmjc() {
        return ymjc;
    }

    public void setYmjc(String ymjc) {
        this.ymjc = ymjc;
    }
}

运行结果如下:

01 02 

02

上面是我关于从 List集合中移除元素的两种方法实践的总结。

猜你喜欢

转载自blog.csdn.net/u012934325/article/details/84983045