精华内容
下载资源
问答
  • 主要给大家总结介绍了关于C#在foreach遍历删除集合中元素的实现方法,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • 场景:使用for循环删除集合中的指定元素 定义一个list集合,并添加数据: List<String> list=new ArrayList<>(); list.add("b"); list.add("e") list.add("b"); list.add("c"); 需求:删除集合...

    场景:使用for循环删除集合中的指定元素

    定义一个list集合,并添加数据:

    List<String> list=new ArrayList<>();

    list.add("b");

    list.add("e")

    list.add("b");

    list.add("c");

    需求:删除该集合中所有字符串为b的数据,代码如下:

    for (int i = 0; i < list.size(); i++) {

    if("b".equals(list.get(i))) {

    list.remove(i);

    }

     

     

    }

    运行结果如下图:

    我们可以看到删除成功,看起来没有问题,下面我们更改一下集合中元素的顺序:

    List<String> list=new ArrayList<>();

    list.add("b");

    list.add("b");

    list.add("e");

    list.add("c");

    再次运行,运行结果如下:

    奇怪的事情发生了,当删除相邻重复元素的时候只删除一个,这是什么原因呢?

    ArrayList的底层结构是数组类型,数组这种数据结构的特点是删除其中某个元素时,后面的所有元素索引都会前移,此时for循环的指针却会下移,因此会略过下一个元素,解决方案是删除时将指针回调一次:

    for (int i = 0; i < list.size(); i++) {

    if("b".equals(list.get(i))) {

    list.remove(i);

    i--;

    }

    }

    此时运行才会得到想要的结果。

    备注:这个问题只会出现在使用for进行遍历的时候,使用迭代器来操作时,不会出现这种问题:

    Iterator it=list.iterator();

    while(it.hasNext()) {

    if("b".equals(it.next())) {

    it.remove();

    }

    }

    运行正常。

    转载:https://baijiahao.baidu.com/s?id=1612550221078338707&wfr=spider&for=pc

    展开全文
  • 一、list集合循环删除元素 1.通过普通的for删除删除符合条件的多个元素 for(int i=0;ilist.size();i++){ if(list.get(i).equals("del")) list.remove(i); } 上面这种方式会抛出java.lang....

    一、list集合循环删除元素

    1.通过普通的for删除删除符合条件的多个元素
    for(int i=0;i<list.size();i++){
        if(list.get(i).equals("del"))
            list.remove(i);
    }
    

    上面这种方式会抛出java.lang.IndexOutOfBoundsException异常。这种方式的问题在于,删除某个元素后,list的大小发生了变化,而你的索引也在变化。假设被遍历list中共有10个元素,当删除了第3个元素后,第4个元素就变成了第3个元素了,第5个就变成了第4个了,但是程序下一步循环到的索引是第4个,这时候取到的就是原本的第5个元素了。这样当迭代到最后一个的时候就会抛异常。因此,这种方式可以用在删除特定的一个元素时使用,但不适合循环删除多个元素时使用。
      可以对上面的程序进行如下改进:

    for(int i=0,len=list.size();i< len;i++){
        if(list.get(i).equals("del")){
           list.remove(i);
           --len;//减少一个
           //此时要注意,因为list会动态变化不像数组会占位,所以当前索引应该后退一位
           --i;
         }
    }
    
    2.通过增强的for循环删除符合条件的元素
    for(String x:list){
        if(x.equals("del"))
            list.remove(x);
    }
    

    上面这种方式在循环过程中从List中删除数据以后,继续循环List时会导致List的next()方法内部出现modCount和expectedModCount不一致(modCount++,而expectedCount值未变),导致抛出ConcurrentModificationException,导致抛出异常。

    modCount是List对象的一个成员变量,它代表该List对象被修改的次数,每对List对象修改一次,modCount都会加1。而expectedModCount是Iterator类里的一个成员变量,创建迭代器的时候将当时的modCount赋值给expectedModCount,随后迭代过程中会检查这个值,一旦发现这个值发生变化,就说明你对容器做了修改,就会抛异常。

    删除完毕马上使用break跳出,则不会触发报错。

    for(String x:list){
        if(x.equals("del")){
            list.remove(x);
            break;
        }
    }
    
    3.过Iterator进行遍历删除符合条件的元素

    使用Iterator的方式可以顺利删除和遍历

    Iterator<String> it = list.iterator();
    while(it.hasNext()){
        String x = it.next();
        if(x.equals("del")){
            it.remove();
        }
    }
    

    这种方式可以正常的循环及删除。但要注意的是,使用iterator的remove方法,如果用list的remove方法同样会报上面提到的ConcurrentModificationException错误。
      迭代器iterator的remove()方法不仅会删除元素,还会维护一个标志,用来记录目前是不是可删除状态。例如,你不能连续两次调用它的remove()方法,调用之前至少有一次next()方法的调用。但是要注意的是:list.remove()只是删除元素,可是不会改变原有元素的位置。比如有 0 1 2 3 4 5这六个元素,我删除掉3这个元素,则4还是处于第四个位置,不会跳到第三个位置。

    4.用一个List 记录要删除的数据,最后removeAll(List);
    List<Integer> removeList = new ArrayList()  
    for(Integer i : intList)  
    {  
        if(i == 13)  
        {  
            removeList.add(i);  
        }  
    }  
    //最后  
    if(removeList.size()>0)  
    {  
        intList.removeAll(removeList);  
    }  


    作者:水桶的魔法
    链接:https://www.jianshu.com/p/5091d03720a4
    來源:简书

    展开全文
  • 有时候我们要删除集合中的某些元素,那么就可以参考下面的代码
  • java循环遍历删除集合list元素 java删除集合List元素 一、问题描述 1、 假设有这么一个集合,代码如下: List<java.sql.Connection> connList=new ArrayList<java.sql.Connection>(10);...

           java中循环遍历删除集合list中的元素 java删除集合List中的元素

     

    一、问题描述

    1、 假设有这么一个集合,代码如下:

    List<java.sql.Connection> connList=new ArrayList<java.sql.Connection>(10);

    2、需求: 将每一个 Connection 对象执行 .close(); 方法

    3、思路:遍历集合中的每一个元素,获取 Connection 对象,执行close()方法,然后在集合中移除该元素。

     

    二、 使用 for 循环 --- 示例代码

    public static void  useFor() throws SQLException{
    		List<java.sql.Connection> connList=new ArrayList<java.sql.Connection>(10);
    		for (int index = 0; index < connList.size(); index++) {
    			Connection connection = connList.get(index);
    			connection.close();
    			connList.remove(connection);
    		}
    	}

     

    遇到问题不能遍历到全部元素,因为集合长度在一直减小,变量 index 一直增加。在示例代码中,当移除到第六个元素时,集合长度为5,index也5,for循环条件不满足,剩下的元素没有被遍历到!

     

    三、使用foreach --- 示例代码

    public static void useForeach() throws SQLException{
    		List<java.sql.Connection> connList=new ArrayList<java.sql.Connection>(10);
    		for (Connection connection : connList) {
    			connection.close();
    			connList.remove(connection);
    		}
    	}

     

    遇到问题:抛出异常: java.util.ConcurrentModificationException 。foreach 在遍历的时候,不允许对集合增、删操作。 具体原因参考: https://blog.csdn.net/lipei1220/article/details/9028669

     

    四、使用Iterator ---- 示例代码

    public static void useIterator() throws SQLException{
    	List<java.sql.Connection> connList=new ArrayList<java.sql.Connection>(10);
    	Iterator<Connection> iterator = connList.iterator();
    	while(iterator.hasNext()){
    		Connection connection = iterator.next();
    		connection.close();
    		iterator.remove();
    	}
    }

     

    遇到问题: 没有问题,完美解决。^_^、^_^^_^! ( 注意用 Iterator 对象的 remove()方法 !)

     

     

    五、总结

    1、使用for循环无法达到预期结果,且错误难以发现; foreach 会抛出异常

    2、java中若需要对集合遍历进行删除操作,记得使用 Iterator 的 remove()方法!

     

     

    PS:为了代码简洁,便于理解,示例代码中省略掉 connList 中添加 Connection 对象的步骤。

     

     

    参考资料:https://www.cnblogs.com/aspirant/p/7900854.html

     

     

    展开全文
  • 集合中删除元素

    2019-09-07 13:33:01
    集合中提供remove方法来删除元素,同样的,迭代器也提供了一个remove方法来删除元素。for循环调用集合的remove方法编译器会将for循环优化为迭代器遍历集合,在迭代器使用集合的remove方法会报一个...

    集合中提供remove方法来删除元素,同样的,迭代器中也提供了一个remove方法来删除元素。for循环调用集合的remove方法编译器会将for循环优化为迭代器遍历集合,在迭代器中使用集合的remove方法会报一个ConcurrentModificationException异常。

    展开全文
  • Android使用集合那是家常便饭的事情来的,但是有的时候容易麻痹大意,比如在删除集合元素的过程,我就掉进过坑里,在此总结下来,以后引以为戒。1. 删除一个集合元素 List<Integer> lists = new ArrayList(); ...
  • 删除集合中元素

    千次阅读 2018-10-27 15:18:42
    删除集合中元素 public class testzhu { public static void main(String[] args) { List&amp;lt;Integer&amp;gt; integerList = new ArrayList&amp;lt;&amp;gt;(Arrays.asList(1,2,3,4,5...
  • 删除集合中特定元素的几种情况

    千次阅读 2019-01-23 15:44:35
    集合中删除元素一直是一个比较容易遗漏的知识点,今天来给大家介绍一下删除集合​​特定元素的一些情况。 ​(一)List如何实现遍历删除 以ArrayList为例  List&lt;String&gt; a1 = new ArrayList...
  • 集合中元素删除

    千次阅读 2010-05-25 17:05:00
    集合中元素删除 最近在工作遇到一个问题,就是要在集合中Remove一个指定的Object,一开始犯了一个很可笑的错误,比如一个ArrayList array有如下元素:”a”,”b”,”c”,”d”,”e”,要Remove其中的”c” ...
  • C#实现在foreach中删除集合中元素

    千次阅读 2017-11-17 17:17:55
    C#实现在foreach中删除集合中元素
  • 主要介绍了Java集合删除元素ArrayList实例详解的相关资料,需要的朋友可以参考下
  • 今天遇到一个问题,就是在前端想要动态更新集合数据(删除)的时候(初始数据全部信息已保存在集合中) 2.问题解决方式: 通过查资料,集合存在动态删除元素的方法——splice() 2.具体解决方式: for(var k = ...
  • Java删除List集合中的重复元素

    千次阅读 2018-01-12 10:45:33
    Java实现删除List集合中的重复元素的方法有很多种,本文只介绍几种常用的方法。简单起见,本例List的泛型皆为String类型,如果泛型为类,去重方法类似。 1、使用HashSet的无重复的特性,只是去重后的List不能保持...
  • java 删除集合中的空元素

    千次阅读 2020-05-05 23:14:51
    java 删除集合中的空元素方法一方法二方法三 方法一 注:下面代码需要注意的是Arrays.asList Arrays.asList创建的数据为定长集合集合长度在操作时是不可以改变的,不能对集合进行增删操作。 如果操作会抛异常。...
  • Set接口继承于Collection接口,它没有提供额外的方法,但实现了Set...因为set类和list类基本一致,这里就不多说了,本文主要讲解的是set类中集合删除。 查阅api。我们发现集合中用迭代的方式遍历一个集合。然后我
  • 下面小编就为大家带来一篇ArrayList删除集合中某一属性相同的元素方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • java list集合中元素删除方法小结

    千次阅读 2017-11-07 11:10:00
    印象循环删除list元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区。下面就来讲一讲。。伸手党可直接跳至文末。看总结。...
  • 有几种方法可以从列表中删除数据项。 1.1 pop方法 1.1.1 在不传递参数的情况下,默认删除最后一个。 data = [1,2,3,4,3,5,7] print(data.pop()) #将会输出末位元素:7 print(data) #输出: 1,2,3,4,3,5 ...
  • Java 删除集合中指定的元素

    千次阅读 2020-04-17 16:04:09
    使用 Collection 类的 collection.remove() 方法来删除集合中的指定的元素 完整代码 import java.util.*; public class Main { public static void main(String [] args) { System.out.println( "集合实例!\n" ...
  • C#循环删除集合中元素

    千次阅读 2014-05-23 23:50:51
    C#循环删除集合中元素 不能够在for++,未删除时++,删除后不要++ 字典的话拷贝了一个键的List public void Update()  {  List keys = new List(_soundDic.Keys);  foreach (string key in keys...
  • list集合添加元素删除元素

    千次阅读 2018-03-26 14:33:37
    也在添加元素:使用迭代器遍历删除时,会报异常: ConcurrentModificationException原因:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常解决方案:将要删除元素放入另一个delList集合中,最后元素...
  • 在Iterator的内部有个expectedModCount 变量, 该变量每次初始化Iterator的时候等于ArrayList的modCount,modCount记录了对ArrayList的结构修改次数, 在通过Iterator对ArrayList进行结构的修改的时候都会将...
  • java如何正确的删除集合中元素

    万次阅读 2016-07-18 21:44:13
    在java如果我们需要遍历集合删除其中的某些元素时,例如对于List来说,我们有三种办法。 1. 普通的for循环遍历并删除 import java.util.*; public class RemoveSetT> { /** * 普通的for循环删除 */ ...
  • Java删除List和Set集合中元素

    千次阅读 2016-12-28 15:01:46
    今天在做项目时,需要删除List和Set的某些元素,当时使用边遍历,边删除的方法,却报了以下异常: ConcurrentModificationException 为了以后不忘记,使用烂笔头把它记录如下: 错误代码的写法,也就是报...
  • 假设有一个list集合: List<string> strList = new List<string>(); strList.Add("header"); strList.Add("founder"); strList.Add("tool" ); 现在我想删除字符串为【header】 方法一: for (int...
  • List集合删除元素的正确姿势

    万次阅读 2018-06-18 16:14:40
    作为Java大家庭集合类框架,List应该是平时开发最常用的,可能有这种需求,当集合中的某些元素符合一定条件时,想要删除这个元素。如:[java] view plain copy print?public&amp;nbsp;class&amp;nbsp;...
  • 消除集合中重复元素

    千次阅读 2018-07-25 10:48:43
    消除集合中重复元素,根本考差点即list与set的区别。 简单点说:list 代表有索引编号的集合,可以存放重复的对象,可以在指定的位置插入对象。set存放不重复的对象,只能有一个null元素。 知道两者的区别,就可以...
  • Java 遍历集合删除元素

    千次阅读 2018-08-03 17:08:05
    正确删除集合元素 问题及分析 注:在浏览阿里巴巴Java开发手册时,自己测试Java遍历集合并删除元素时发现有些巧合以及总结 先写开发手册里一个例子,大家猜一下以下代码的输出 List&amp;lt;String&...
  • 详细代码 import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Test1 { public static void main(String[]...//声明一个集合并赋值 List lists=new ArrayList();

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 448,692
精华内容 179,476
关键字:

删除集合中的元素