本文主要是介绍关于从集合List中移除元素,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
当我们想从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.ConcurrentModificationExceptionat 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集合中移除元素的两种方法实践的总结。
这篇关于关于从集合List中移除元素的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!