如果要循环删除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练习下)
相关推荐
当我们需要遍历List并根据条件删除特定元素时,需要注意正确的方法,以避免在遍历过程中出现错误。以下将详细介绍如何在C#中遍历List并删除元素,包括正序和倒序遍历的技巧。 首先,我们来看一下错误的遍历方式。...
前言 初学Python,遇到过这样的问题,在遍历list的时候,删除符合条件的数据,可是总是报异常,代码如下: ...原因是在删除list中的元素后,list的实际长度变小了,但是循环次数没有减少,依然按照
这是推荐的循环删除多个元素的方法,因为它能够正确处理删除后迭代器的状态。 总结: - **单个元素删除**:无论是常规for循环、增强for循环还是Iterator遍历,都可以用来删除列表中的特定单个元素,但需要注意每种...
"易语言循环删除文件源码"这个主题涉及的核心知识点主要是文件系统的操作和循环结构的应用。 1. 文件操作: 在易语言中,文件操作主要包括打开文件(OpenFile)、读取文件(ReadFile)、写入文件(WriteFile)和...
方法一:循环元素删除 // 删除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 -- ) {...
在探讨“简单的ListCtrl多行删除”这一主题时,我们首先需要理解ListCtrl的基本概念及其在Windows编程中的应用。ListCtrl是Microsoft Windows中一个非常重要的控件,它提供了列表视图的功能,允许用户以列表的形式...
在这个场景下,可以将与ListCtrl交互的部分封装成一个类,如CMyListCtrl,其中包含处理多选、删除、修改的方法。这样,其他部分的代码只需调用这些方法即可完成所需操作,而无需关心具体的实现细节。同时,数据库...
总结来说,当在循环中删除`std::list`元素时,必须小心处理迭代器,确保它们不会因元素的删除而失效。可以使用迭代器的副本或`erase()`的返回值来维护有效的迭代器状态。理解这一点对于编写稳定、高效的C++代码至关...
在JavaScript中,原生提供的`splice()`方法是一种常用的方式,它通过指定的索引位置来删除元素。然而,在某些情况下,使用`splice()`方法可能会得到不符合预期的结果,比如在原数组上直接修改,返回被删除的元素,而...
4. **隐藏滚动条**:可以通过修改`ListCtrl`的样式来隐藏滚动条,例如在MFC中可以使用`SetScrollbars`函数来设置无滚动条,或者在wxWidgets中使用`SetScrollbar`方法设置宽度为0。 5. **模拟滚动**:由于滚动条被...
HashMap和List遍历方法及如何遍历删除元素总结 HashMap和List都是Java中最常用的数据结构,它们都可以用来存储和操作数据。然而,在遍历和删除元素时,需要小心地处理,以免出现问题。下面总结了HashMap和List的...
遍历嵌套列表时,可以使用for循环,但需要注意嵌套循环的情况。如果每个子列表长度不一,可能需要使用递归或者条件判断来处理。以下是一个简单的遍历示例: ```python for sublist in nested_list: for item in ...
### Java集合类ArrayList循环中删除特定元素的方法 #### 背景与问题 在Java编程中,`ArrayList`是开发者最常使用的集合类之一。它实现了`List`接口,提供了动态数组的功能。在实际开发过程中,经常需要遍历`...
本文实例讲述了Python list列表中删除多个重复元素操作。分享给大家供大家参考,具体如下: 我们以下面这个list为例,删除其中所有值为6的元素: l=[9,6,5,6,6,7,8,9,6,0] 首先尝试remove方法: l.remove(6) ...
在C#编程中,`List<T>` 是一种常用的动态数组,它允许我们在运行时添加、删除和访问元素。标题“c#list添加数据”指的是如何向已经实例化的`List<T>`对象中添加数据。描述中提到“list<>.count==0”的情况,即列表为...
`List`接口位于`java.util`包下,继承自`Collection`接口,并且实现了`Iterable`接口,使得我们可以使用增强型for循环来遍历列表。`List`接口的主要特点是它维护了元素的插入顺序,提供了按索引访问元素的能力,同时...