循环删除list中的某一元素的四种方式

方式一:

/**
  * 直接使用foreach方法移除list中的元素会抛异常
  * Exception in thread "main" java.util.ConcurrentModificationException
  * 这种方式的问题在于,删除某个元素后,list的大小发生了变化,而你的索引也在变化,
  * 所以会导致你在遍历的时候漏掉某些元素。
  * 比如当你删除第1个元素后,继续根据索引访问第2个元素时,因为删除的关系后面的元素都往前移动了一位,
  * 所以实际访问的是第3个元素。
  * 因此,这种方式可以用在删除特定的一个元素时使用,但不适合循环删除多个元素时使用。
  */
public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("aa");
    list.add("bb");
    list.add("cc");
    for (String str : list) {
        if ("aa".equals(str)) {
            list.remove(str);
        }
    }
    System.out.println(list.size());
}

方式二:

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("aa");
    list.add("bb");
    list.add("cc");
    Iterator<String> it = list.iterator();
    while(it.hasNext()){
        String str = (String)it.next();
        if("aa".equals(str)){
            it.remove();
        }
    }
    System.out.println(list.size());
}

方式三:

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("aa");
    list.add("bb");
    list.add("cc");
    for (int i = list.size() - 1; i >= 0; i--) {
        String str = list.get(i);
        if ("cc".equals(str)) {
            list.remove(str);
        }
    }
    System.out.println(list.size());
}

方式四:

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("aa");
    list.add("bb");
    list.add("cc");
    for (int i = list.size() - 1; i >= 0; i--) {
        String str = list.get(i);
        if ("cc".equals(str)) {
            list.remove(str);
        }
    }
    System.out.println(list.size());
}

原文地址:https://www.cnblogs.com/JimmyThomas/p/12105266.html

时间: 2024-10-13 03:12:47

循环删除list中的某一元素的四种方式的相关文章

Struts2中访问web元素的四种方式

Struts2中访问web元素的四种方式如下: 通过ActionContext来访问Map类型的request.session.application对象. 通过实现RequestAware.SessionAware.ApplicationAware接口来访问Map类型的request.session.application对象(IoC方式). 通过ServletActionContext来访问Servlet API类型的HttpServletRequest. HttpSession. Serv

Action中取得request,session的四种方式

在Struts2中,从Action中取得request,session的对象进行应用是开发中的必需步骤,那么如何从Action中取得这些对象呢?Struts2为我们提供了四种方式.分别为servlet 不相关的 非IoC 取得Request等对象的方式servlet 不相关的 IoC 取得Request等对象的方式servlet 相关的 非IoC 取得Request等对象的方式servlet 相关的 IoC 取得Request等对象的方式以下分别叙述. 首先请看struts.xml文件文件内容:

Spring框架中获取连接池常用的四种方式

1:DBCP数据源 DBCP类包位于 /lib/jakarta-commons/commons-dbcp.jar,DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池,所以在类路径下还必须包括/lib/jakarta-commons/commons-pool.jar.下面是使用DBCP配置oracle数据源的配置片断: <bean id="dataSource" class="org.apache.commons.dbcp.BasicDat

循环删除list中多个元素

错误的做法: for(int i= 0;i<list.size();i--){ for(int j= 0; j<list2.size();j++){ if(list.get(i).contains(list2.get(j))){ list.remove(i); } } } 结果:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 因为在你删除元素的同事list.size()在变小,这

Struts2中获取HttpServletRequest,HttpSession等的几种方式

转自:http://www.kaifajie.cn/struts/8944.html package com.log; import java.io.IOException; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import o

约瑟夫问题 算法很简单保证每隔人都能看懂用数组实现 利用循环删除数组中的元素

#include<iostream> using namespace std; const int size = 1000; void ArrDel() { int arr[size]; //循环结束标志,一直循环到数组中只剩下最后一个元素结束 int currentNum = size; int count = 0; for (int k = 0; k < size; k++) { arr[k] = k; } //currentNum==1表示数组中只剩下最后一个元素 是循环结束的标志

JS实现循环删除数组中元素的方法介绍

这篇文章主要给大家介绍了关于Javascript循环删除数组中元素的几种方法,文中给出了详细的示例代码供大家参考学习,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧. 本文主要跟大家分享了关于Javascript循环删除数组中元素的几种方法,分享出来供大家参考学习,下面来看看详细的介绍: 发现问题 大家在码代码的过程中,经常会遇到在循环中移除指定元素的需求.按照常规的思路,直接一个for循环,然后在循环里面来个if判断,在判断中删除掉指定元素即可.但是实际情况往往不会像预想的那样顺利

JAVA中循环删除list中元素的方法总结

印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区.下面就来讲一讲..伸手党可直接跳至文末.看总结.. JAVA中循环遍历list有三种方式for循环.增强for循环(也就是常说的foreach循环).iterator遍历. 1.for循环遍历list for(int i=0;i<list.size();i++){ if(list.get(i).equals("del")

AVA中循环删除list中元素

文章来源: https://www.cnblogs.com/pcheng/p/5336903.html JAVA中循环遍历list有三种方式for循环.增强for循环(也就是常说的foreach循环).iterator遍历. 1.for循环遍历list for(int i=0;i<list.size();i++){ if(list.get(i).equals("del")) list.remove(i); } 这种方式的问题在于,删除某个元素后,list的大小发生了变化,而你的索