栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java List遍历删除

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java List遍历删除

对于列表,这里以ArrayList进行举例说明,下面给出几种经常会遇到的写法
首先初始化一个list数组

List list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
    list.add(i + ">index");
}
错误写法 foreach

这个属于我们最常见的foreach循环,在循环内部判断满足条件的直接删除

for (String id : list) {
    if (id.contains("2")) {
        list.remove(id);
    }
}

上面这种写法导致的问题,很容易可以发现,因为上面代码跑完之后,堆栈就出来了

很典型的并发修改错误,在foreach循环中不允许删除,新增

普通for循环
for (int index = 0; index < list.size(); index++) {
    if (index % 5 == 0) {
        list.remove(index);
    }
}
System.out.println(list);

上面这种写法,我们希望把列表中,第0,5,10,15位置的元素干掉,正常执行,倒是不会报错,然而输出的结果却和我们的预期不一致

for循环中,另外一种写法可能更加常见,为了避免每次都访问 list.size() 方法,我可能提前用一个变量保存数组大小

int size = list.size();
for (int index = 0; index < size; index++) {
    if (index % 5 == 0) {
        list.remove(index);
    } else {
        System.out.print(list.get(index));
    }
}

上面这个问题就很明显了,数组越界

正确写法 迭代方式
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
    String tmp = iterator.next();
    if (tmp.contains("2")) {
        iterator.remove();
    }
}
jdk8+ 流方式
list.removeIf(s -> s.contains("3"));
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/319032.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号