如果要循环删除List中的某些元素,例如删除值都是‘a’的元素,如果使用普通的for循环,很容易就会会漏删或者报错。
package com.pdnev; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import org.junit.Before; import org.junit.Test; public class RemoveList { List<String> list; //准备数据 @Before public void setData(){ list = new ArrayList<String>(); list.add("a");list.add("b");list.add("c");list.add("a");list.add("b");list.add("b");list.add("d");list.add("c");list.add("c");list.add("d");list.add("c"); } //测试正确的方法 @Test public void removeElement(){ System.out.println("原始数据: "+ Arrays.asList(list)); //从后向前删除 for(int i = list.size()-1;i>=0;i--){ if(list.get(i).equals("a")) list.remove(i); } System.out.println("删除a后: "+ Arrays.asList(list)); //Iterator 删除 Iterator<String> it = list.iterator(); while(it.hasNext()){ String s = it.next(); if(s.equals("b")) it.remove(); //不可以使用list.remove } System.out.println("删除b后: "+ Arrays.asList(list)); //会漏掉的删除 for(int i = 0;i<list.size();i++){ if(list.get(i).equals("c")) list.remove(i); } System.out.println("删除c后: "+ Arrays.asList(list)); int size = list.size(); for(int i = 0;i<size;i++){ if(list.get(i).equals("d")) list.remove(i); } } }
执行结果:
可以看到,第一种使用从后向前删除是没有问题的。第二种使用Iterator 删除也是没问题的。
但是删除c 这一行的输出就有问题,仍然有c。 这是使用普通的for循环删除,会漏删,另外,如果size不是每次都去获取,会报越界异常。
如果使用 增强for的时候。会报ConcurrentModificationException异常
(因为对junit不熟悉,所以代码使用了junit练习下)
相关推荐
主要介绍了C#遍历List并删除某个元素的方法,实例分析了正序与倒序遍历list及删除元素的使用技巧,需要的朋友可以参考下
前言 初学Python,遇到过这样的问题,在遍历list的时候,删除符合条件的数据,可是总是报异常,代码如下: ...原因是在删除list中的元素后,list的实际长度变小了,但是循环次数没有减少,依然按照
方法一:循环元素删除 // 删除ArrayList中重复元素 public static void removeDuplicate(List list) { for ( int i = 0 ; i < list.size() - 1 ; i ++ ) { for ( int j = list.size() - 1 ; j > i; j -- ) {...
下面小编就为大家带来一篇java中循环删除list中元素的方法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
下面小编就为大家带来一篇基于list循环删除元素,迭代器失效的问题详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
本文实例讲述了Python list列表中删除多个重复元素操作。分享给大家供大家参考,具体如下: 我们以下面这个list为例,删除其中所有值为6的元素: l=[9,6,5,6,6,7,8,9,6,0] 首先尝试remove方法: l.remove(6) ...
在遍历list的时候,删除符合条件的数据,可是总是报异常,代码如下: num_list = [1, 2, 3, 4, 5] print(num_list) for i in range(len(num_list)): ...解决方案:倒序循环删除 num_list = [1, 2, 3, 4,
用C++和Java实现带头节点的双向循环链表,要继承linearList类,并实现它的所有功能,另外,必须实现双向迭代器。 实现带头节点的双向循环链表,要具有以下的功能: 判断表是否为空,如果为空则返回true,不空返回...
下面小编就为大家带来一篇java中循环遍历删除List和Set集合中元素的方法(推荐)。小编觉得挺不错的,在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
方法一:采用for循环,并且从尾到头遍历 如果从头到尾正序遍历删除的话,有些符合删除条件的元素会成为漏网之鱼; 正序删除举例: List<string> tempList = new List() { "a","b","b","c" }; for (int i = 0; ...
本文实例讲述了Python实现列表删除重复元素的三种常用方法。分享给大家供大家参考,具体如下: 给定一个列表,要求删除列表中重复元素。 listA = ['python','语','言','是','一','门','动','态','语','言'] 方法1...
在本篇文章中小编给大家分享了关于HashMap和List遍历方法及如何遍历删除元素知识点总结,需要的朋友们参考下。
C++ STL list 遍历删除崩溃 错误用法一 下面这种用法会在for的地方崩溃,分析 第一次for循环的时候 it=0,当t.erase(it)执行完成之后 it就变成了 -17891602 表明it不能再作为迭代器进行运算,自然会报错。 #...
主要介绍了Python如何在循环内使用list.remove(),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
在Linux内核源码list.h基础上,修改成应用层使用的头文件 实现了循环双链表的的各功能函数和宏定义,包括但不限于链表的创建、插入、删除、遍历。
双向循环链表的创建,添加,删除及输出的C代码
在上述for循环中,假设我们删除了index=2的值,原本index=3及之后的值会向前补位,所以在循环中就跳过了原index=3的变量 同理,使用list.pop()函数删除指定元素的时候,也会出现上述情况,如: In[33]: a = [1,2,3,...