Java 中的循环删除

学习小记 JAVA第一节

以前总感觉自己记性好,学过的东西都可以记在脑子里,现在发现确实也需要一些实质化的东西来记录自己所学,开这么一个专题吧,记录自己后端、前端各种学习到的东西

java的list如何在循环中删除数据

  1. 问题原因

list使用数组实现,在循环中如果按照下标删除数据,后面的数据会补在被删除的元素的位置,后续删除的元素下标会不正确。

使用foreach循环,参照资料:

ArrayList的父类AbstarctList中有一个域modCount,每次对集合进行修改(增添、删除元素)时modCount都会+1

注意:倒序循环也是可行的,每次删除之后list的长度-1,元素前移不会影响后续的删除

  1. Java8 Stream

这是我最喜欢的一种方式

List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            list.add(i);
        }

        list = list.stream().filter(item -> item%3 != 0).collect(Collectors.toList());
复制代码

3.迭代器Iterator删除 (多线程要加锁,这也是阿里巴巴推荐的方式)

Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()) {
            Integer next = iterator.next();
            if (next%3 == 0) {
                iterator.remove();
            }
        }
复制代码

4.倒序循环删除

for (int i = list.size() - 1; i > 0; i--) {
            if (list.get(i)%3 == 0) {
                list.remove(i);
            }
        }
复制代码

三种都删除了对3取余为0的项,建议使用stream流的方式进行处理

加油!加油!加油!

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享