最近在工作中遇到一个问题,就是要在集合中Remove一个指定的Object,一开始犯了一个很可笑的错误,比如一个ArrayList array中有如下元素:”a”,”b”,”c”,”d”,”e”,要Remove其中的”c”
for (int i = 0; i < array.size(); i++) {
if (array.get(i).equals("c")) {
array.remove(i);
}
}
上面的代码乍一看也没什么问题,如果只有一个”c”的话也可以正常Remove,但是如果有多个”c”的话,在Remove一次后,array的size就变动,导致最后整个array有一些元素没有遍历到,结果肯定就是错的。后来想想,平时遍历List时用的for-each方法,应该可以正常的Remove,于是把代码改成如下:
for (String item : array) {
if (item.equals("c")) {
array.remove(item);
}
}
结果跟第一种方法一样,也是错的。没有办法,去翻Java官方文档。发现了文档里说的,要移除一个集合中的元素,要使用Iterators。
文档中说:Iterator.remove是在遍历集合过程中删除元素的唯一安全的方法,当迭代正在进行时,使用别的方法改变集合会引发不确定的行为。
并且在以下两种情况应该使用Iterator代替for-each:
1、 删除当前元素,for-each结构隐藏了Iterator,没有办法调用remove方法
2、 并行的遍历多个Collections
于是把代码在修改一下,这样总算对了:
for (Iterator<String> it = array.iterator(); it.hasNext(); ) {
String item = it.next();
if (item.equals("c")) {
it.remove();
}
}
分享到:
- 2009-07-10 17:38
- 浏览 2127
- 评论(6)
- 论坛回复 / 浏览 (6 / 3232)
- 查看更多
相关推荐
在foreach中删除元素时,每一次删除都会导致集合的大小和元素索引值发生变化,从而导致在foreach中删除元素时会抛出异常。 集合已修改;可能无法执行枚举操作。 方法一:采用for循环,并且从尾到头遍历 如果...
当我们需要遍历List并根据条件删除特定元素时,需要注意正确的方法,以避免在遍历过程中出现错误。以下将详细介绍如何在C#中遍历List并删除元素,包括正序和倒序遍历的技巧。 首先,我们来看一下错误的遍历方式。...
2. 当使用 Iterator 来迭代访问 Collection 集合元素时,Collection 集合里的元素不能被改变,只有通过 Iterator 的 remove 方法来删除上一次 next 方法返回的集合元素才可以。否则将会引发 java.util....
- **容量与大小**: `size()`返回集合元素数量,`ensureCapacity()`预先设定容量。 4. **集合转换**: - `toArray()`:将集合转换为数组。 - `copyOf()`:Java 8引入,用于安全地创建数组副本。 5. **集合操作**...
除了这些基本操作,Java集合框架还提供了`removeAll(Collection<?> c)`方法,用于删除集合中所有匹配指定集合的元素,以及`retainAll(Collection<?> c)`方法,保留那些存在于指定集合中的元素,其余的都会被删除。...
根据给定文件的信息,本文将详细介绍如何在Java的List集合中去除重复元素的三种方法:使用for循环、使用迭代器以及利用HashSet的特性。 ### 一、使用for循环去除重复元素 这种方法的基本思想是通过双重循环来遍历...
本文将详细讲解C++编程中集合类的实现,包括集合类的定义、添加元素、删除元素、判断集合是否为空或满、判断元素是否包含在集合中、计算集合中的元素总数、输出集合中的元素、求两个集合的交集和并集等操作。...
该类中包含了多个成员函数,用于实现集合的基本运算,例如添加元素、删除元素、判断元素是否在集合中、输出集合等。 首先,我们定义了 int_set 类的构造函数,用于初始化集合的最大大小和当前大小。然后,我们定义...
- 不可变性:集合中的元素不能被修改,尝试添加已存在的元素或删除不存在的元素会引发错误。 - 唯一性:集合内的元素必须是不可变的,并且不允许重复。尝试添加相同的元素只会保留一个,例如:`s = {'a', 'a', 'a'}`...
删除JAVA集合中元素的实现代码 在 Java 编程中,删除集合中的元素是一个常见的问题。有时候,我们需要删除集合中的某些元素,那么就可以参考下面的代码。 在 Java 中,集合是不能在遍历时删除元素的。因为 List 在...
在VB6(Visual Basic 6)中,处理数组并删除特定元素是一项常见的编程任务。数组是一种数据结构,用于存储同一类型的数据集合。当需要从数组中移除某个元素时,通常需要采用一定的策略来实现这一操作,因为VB6的数组...
当你在一个迭代器正在遍历集合的过程中添加或删除元素时,就会抛出这个异常。这个问题在单线程环境下不会出现,但在多线程并发场景下,如果多个线程同时修改一个集合,就可能导致`ConcurrentModificationException`...
本文将深入探讨如何比较两个集合,并关注在Java中使用List进行对比时的“新增”、“编辑”和“删除”操作。首先,我们需要理解集合的基本概念。集合是存储一组元素的数据结构,而List是一种有序的集合,允许重复元素...
当我们需要在遍历集合的过程中删除或添加元素时,必须注意一些特定的策略,因为不是所有的集合类型都支持这种操作。这里我们将详细讨论如何在C#中处理这种情况,特别是在使用`LinkedList<T>`时。 首先,C#的标准...
删除集合中的元素,可以使用`remove()`或`discard()`方法。`remove()`会抛出异常如果尝试删除的元素不存在,而`discard()`则不会。例如: ```python name_set.remove('Gina') # 如果Gina不在集合中,将抛出异常 ...
这些操作对于集合的并、交、差运算至关重要,因为它们允许在链表中有效地查找、插入和删除元素。 集合的抽象数据类型进一步定义了创建集合、销毁集合、计算并集、交集、差集以及打印集合的操作。这些操作基于有序表...
- **A_B(A, D)**:实现集合A与集合D的差集操作,即从集合A中删除所有集合D中存在的元素。 - 遍历集合D的元素,并检查其是否存在于集合A中。 - 如果存在,则从集合A中删除该元素。 #### 3. 辅助函数 - **GetElem(L...
在Java编程中,删除集合元素是一项常见的操作,但必须遵循特定的规则,以避免出现异常。在本例中,我们探讨了如何在Java中安全地删除一个集合的多个元素,特别是涉及`for each`循环和`Iterator`时的注意事项。 首先...