关于ArrayList删除的一些记录

图片[1]-关于ArrayList删除的一些记录-梦境学习站
关于ArrayList删除的一些记录

首先创建一个list集合,并填入元素

    public void listExercise(){
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("aaa");
        list.add("aaa");
        list.add("bbb0");
        list.add("bbb1");
        list.add("bbb2");
        list.add("bbb3");
        list.add("ccc");
        list.add("ccc");
        list.add("ccc");

错误的删除方法

for (int i = 0; i < list.size(); i++) {
            if (list.get(i).contains("bbb")) {
                list.remove(i);
            }
        }

由于数组列表的特性,遍历删除中每次删除一个元素,下一个元素的索引会自动 -1。这就导致了无法删除相邻元素的问题。所以我们应采用下面的删除方法。

图片[2]-关于ArrayList删除的一些记录-梦境学习站

ArrayList删除方法

  • 采用倒序遍历的方法
for (int i = list.size() - 1; i >= 0; i--) {
            if (list.get(i).contains("bbb")){
                list.remove(i);
            }
        }

从上面的错误方法可知,他的索引会自动 -1,那么我们可以采取倒序遍历,从下往上删除。

  • 使用迭代器删除
   Iterator it = list.iterator();
   while (it.hasNext()){
        if(it.next().toString().contains("bbb")){
                it.remove();
            }
        }
  • Lambda表达式删除
list.removeIf(s -> s.contains("bbb"));

由于从JDK1.8之后 JAVA开始支持Lambda表达式了,这种方法写起来简单,快捷。

  • 正确结果展示
图片[3]-关于ArrayList删除的一些记录-梦境学习站

程序源码

package com.godgy.test;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

/**
 * @author : Mr.Godgy
 * @version : 1.0
 * @date : 2022/9/7
 * @description:
 */
public class Exercise {
    @Test
    public void listExercise(){
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("aaa");
        list.add("aaa");
        list.add("bbb0");
        list.add("bbb1");
        list.add("bbb2");
        list.add("bbb3");
        list.add("ccc");
        list.add("ccc");
        list.add("ccc");

        //此方法遍历只会删除bbb1和bbb3
/*        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).contains("bbb")) {
                list.remove(i);
            }
        }*/

        //迭代器删除
/*        Iterator it = list.iterator();
        while (it.hasNext()){
            if(it.next().toString().contains("bbb")){
                it.remove();
            }
        }*/

        //采取逆序遍历来删除
/*        for (int i = list.size() - 1; i >= 0; i--) {
            if (list.get(i).contains("bbb")){
                list.remove(i);
            }
        }*/

        //使用lambda删除(JDK1.8以后)
        list.removeIf(s -> s.contains("bbb"));
        list.forEach(item-> System.out.println(item));
    }
}
------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片