学无先后,达者为师

网站首页 编程语言 正文

List集合循环删除特殊元素之六种方法(实践)

作者:提里奥丶弗丁 更新时间: 2023-07-18 编程语言

        1、利用List的迭代器删除集合中的元素(推荐)

    /**
     *
     * 利用List的迭代器删除集合中的元素(推荐)
     * @author :xiarg
     * @date : 2023/4/14 9:02
     */
    @Test
    public void iteratorDelListTest(){
        List<String> list = new ArrayList<>(Arrays.asList("lilei","hanmeimei","zhangsan","lisi"));
        log.info("删除之前的List集合 -> {}",list);
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()){
            String item = iterator.next();
            if(item.contains("m")){
                iterator.remove();
            }
        }
        log.info("删除之后的List集合 -> {}",list);
    }

        2、stream过滤掉不想要的数据,但是新生成了一个集合

    /**
     *
     * stream过滤掉不想要的数据,但是新生成了一个集合
     * @author :xiarg
     * @date : 2023/4/14 9:20
     */
    @Test
    public void streamDelListTest(){
        List<String> list = new ArrayList<>(Arrays.asList("lilei","hanmeimei","zhangsan","lisi"));
        log.info("删除之前的List集合 -> {}",list);
        list = list.stream().filter( item -> !item.contains("m")).collect(Collectors.toList());
        log.info("删除之后的List集合 -> {}",list);
    }

        3、采用集合的removeIf()方法(),实际上也是利用了1中的迭代器方法

    /**
     *
     * 采用集合的removeIf()方法
     * 实际上也是使用迭代器操作的
     * @author :xiarg
     * @date : 2023/4/14 9:23
     */
    @Test
    public void removeIfDelListTest(){
        List<String> list = new ArrayList<>(Arrays.asList("lilei","hanmeimei","zhangsan","lisi"));
        log.info("删除之前的List集合 -> {}",list);
        list.removeIf(item -> item.contains("m"));
        log.info("删除之后的List集合 -> {}",list);
    }

        4、采用for循环删除指定元素

    /**
     *
     * 采用for循环删除指定元素,先获取集合size。
     * 删除一个元素i减少1,size减少1
     * 减少的原因:由于当前元素被删除,后续元素下标会变成当前元素下标,如果i不减1,将跳过一个元素,
     *           size减少1是因为集合减少元素。for循环需要减少一次
     * @author :xiarg
     * @date : 2023/4/14 9:39
     */
    @Test
    public void forDelList(){
        List<String> list = new ArrayList<>(Arrays.asList("lilei","hanmeimei","zhangsan","lisi"));
        log.info("删除之前的List集合 -> {}",list);
        int size = list.size();
        for (int i = 0; i < size; i++) {
            String item = list.get(i);
            if(item.contains("m")){
                list.remove(item);
                i--;
                size--;
            }
        }
        log.info("删除之后的List集合 -> {}",list);
    }

        5、采用for倒叙循环

    /**
     *
     * 采用for倒叙循环,由于删除后面的元素,不影响前面的元素的下标
     * @author :xiarg
     * @date : 2023/4/14 9:39
     */
    @Test
    public void forBackDelList(){
        List<String> list = new ArrayList<>(Arrays.asList("lilei","hanmeimei","zhangsan","lisi"));
        log.info("删除之前的List集合 -> {}",list);
        int size = list.size();
        for (int i = size -1 ; i >= 0; i--) {
            String item = list.get(i);
            if(item.contains("m")){
                list.remove(item);
            }
        }
        log.info("删除之后的List集合 -> {}",list);
    }

        6、新建一个集合,循环新建的集合的元素,操作删除老集合

    /**
     *
     * 新建一个集合,循环新建的集合的元素,操作删除老集合(这个方法太笨了)
     * @author :xiarg
     * @date : 2023/4/14 9:39
     */
    @Test
    public void newListDelList(){
        List<String> list = new ArrayList<>(Arrays.asList("lilei","hanmeimei","zhangsan","lisi"));
        List<String> newList = new ArrayList<>(list);
        log.info("删除之前的List集合 -> {}",list);
        int size = newList.size();
        for (int i = 0; i < size; i++) {
            String item = newList.get(i);
            if(item.contains("m")){
                list.remove(i);
            }
        }
        log.info("删除之后的List集合 -> {}",list);
    }

        笔者推荐使用第一个。

原文链接:https://blog.csdn.net/m0_65014849/article/details/130147088

  • 上一篇:没有了
  • 下一篇:没有了
栏目分类
最近更新