尚学堂 老师好!

上海:15201841284

广州:020-2989 6995

深圳:0755-23061965

武汉:027-8798 9193

Java猿必须掌握的循环删除List元素的正确方法!

时间:2018-06-22   来源:尚学堂   阅读:1,571
首页> Java猿必须掌握的循环删除List元素的正确方法!

首先看下下面的各种删除list元素的例子

public static void main(String[] args) {

List<String> list = new ArrayList<>(Arrays.asList("a1", "ab2", "a3", "ab4", "a5", "ab6", "a7", "ab8", "a9"));

/**

* 报错

* java.util.ConcurrentModificationException

*/

for (String str : list) {

if (str.contains("b")) {

list.remove(str);

}

}

/**

* 报错:下标越界

* java.lang.IndexOutOfBoundsException

*/

int size = list.size();

for (int i = 0; i < size; i++) {

String str = list.get(i);

if (str.contains("b")) {

list.remove(i);

}

}

/**

* 正常删除,每次调用size方法,损耗性能,不推荐

*/

for (int i = 0; i < list.size(); i++) {

String str = list.get(i);

if (str.contains("b")) {

list.remove(i);

}

}

/**

* 正常删除,推荐使用

*/

for (Iterator<String> ite = list.iterator(); ite.hasNext();) {

String str = ite.next();

if (str.contains("b")) {

ite.remove();

}

}

/**

* 报错

* java.util.ConcurrentModificationException

*/

for (Iterator<String> ite = list.iterator(); ite.hasNext();) {

String str = ite.next();

if (str.contains("b")) {

list.remove(str);

}

}

}

报异常IndexOutOfBoundsException我们很理解,是动态删除了元素导致数组下标越界了。

ConcurrentModificationException呢?

其中,for(xx in xx)是增强的for循环,即迭代器Iterator的加强实现,其内部是调用的Iterator的方法,为什么会报ConcurrentModificationException错误,我们来看下源码:

 

取下个元素的时候都会去判断要修改的数量和期待修改的数量是否一致,不一致则会报错,而通过迭代器本身调用remove方法则不会有这个问题,因为它删除的时候会把这两个数量同步。搞清楚它是增加的for循环就不难理解其中的奥秘了。

  • 北京校区
  • 山西校区
  • 武汉校区
  • 长沙校区
  • 深圳校区
  • 上海校区
  • 广州校区
  • 保定招生办
  • 黑龙江项目办

北京京南校区:北京亦庄经济开发区科创十四街6号院1号楼 赛蒂国际工业园
咨询电话:400-009-1906 / 010-56233821
面授课程: JavaEE+微服务+大数据     大数据+机器学习+平台架构     Python+数据分析+机器学习  人工智能+模式识别+强化学习   WEB前端+移动端+服务端渲染

山西学区地址:山西省晋中市榆次区大学城大学生活广场万科商业A1座702

武汉学区地址:武汉市东湖高新区光谷金融港B22栋11楼
咨询电话:027-87989193

网址:http://www.cssxt.com/
咨询电话:0731-83072091

深圳校区地址:深圳市宝安区航城大道U8智造产业园U6栋3楼
咨询电话:0755-23061965 / 18898413781

上海尚学堂校区地址:上海市浦东新区城丰路650号
咨询电话:021-67690939

广州校区地址:广州市天河区车陂街道大岗路5号中侨广场2栋321室(四号线车陂站D出口,或brt车陂站)
咨询电话:18948349646

保定招生办公室

地址:河北省保定市竞秀区朝阳南大街777号鸿悦国际1101室

电话:15132423123

黑龙江项目办
地点:哈尔滨市松北区博文路青年部落孵化器1层
电话:15321415678
Copyright 2006-2020 北京尚学堂科技有限公司  京ICP备13018289号-19  京公网安备11010802015183  
网站维护:北京尚学堂科技有限公司昌平分公司