日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

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

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新