最近在工作中遇到一个问题,就是要在集合中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
- 浏览 2070
- 评论(6)
- 论坛回复 / 浏览 (6 / 3201)
- 查看更多
相关推荐
在foreach中删除元素时,每一次删除都会导致集合的大小和元素索引值发生变化,从而导致在foreach中删除元素时会抛出异常。 集合已修改;可能无法执行枚举操作。 方法一:采用for循环,并且从尾到头遍历 如果...
Java 实例 - 删除集合中指定元素源代码+详细指导教程.zip
4)打印集合的大小,然后删除集合中的第3个元素,并显示删除元素的内容,然后再打印目前集合中第3个元素的内容,并再次打印集合的大小。 3、编写程序练习Map集合的基本使用: 1)创建一个只能容纳String对象的...
主要介绍了C#集合遍历时删除和增加元素的方法,结合实例形式分析了C#针对集合元素的遍历、添加与删除等操作实现方法与注意事项,需要的朋友可以参考下
将数组B中的元素逐一与数组B中的元素进行比较,把相同的元素从数组C中删除,数组C便是集合A和集合B的差A-B。 (5)集合的补运算:将数组E中的元素逐一与数组A中的元素进行比较,把不相同的元素保存到数组C中,数组C...
主要介绍了C#遍历List并删除某个元素的方法,实例分析了正序与倒序遍历list及删除元素的使用技巧,需要的朋友可以参考下
1. 本演示程序中,集合元素限定为数字,大小由用户输入。集合中数字顺序不限,且一旦出现重复字符或非法字符,程序能自动滤去。输出的运算结果中将不含重复数字或非法字符,且按照从小到大的顺序输出。 2. 演示...
• 抽象的针对不同Java集合实现的比较实验,以找出时间与集合大小之间的关系,以及在检索过程中,从集合中删除元素以及遍历每个集合中的所有元素的过程。 • 方法用数字填充集合,并测量进行散文的时间,然后将结果...
java集合类arraylist循环中删除特定元素的方法.docx
Java中的For each实际上使用的是iterator进行处理的。而iterator是不允许集合在...而我在for each时,从集合中删除了一个元素,这导致了iterator抛出了ConcurrentModificationException,下面来看看到底怎么回事。
Java集合框架中的Set接口是一种不允许包含重复元素的集合。Set接口继承自Collection接口,因此它具有Collection接口定义的所有方法。同时,Set接口还具有自己的特殊方法,例如:添加元素、删除元素、判断元素是否...
下面小编就为大家带来一篇java中循环遍历删除List和Set集合中元素的方法(推荐)。小编觉得挺不错的,在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
有时候我们要删除集合中的某些元素,那么就可以参考下面的代码
字典和集合综合案例;遍历字典中所有的“键-值”对需要用到items()方法,该方法以列表形式返回可遍历的“(键,值)”元组。;当不需要使用字典中的值时,...1.添加与删除集合元素;例如:;2.集合运算;例如:;;;;;课程小结
Collection接口是Java集合框架中的基础接口,定义了一些基本的集合操作,包括添加元素、删除元素、遍历集合等。在Java中,Collection接口是一个顶层接口,它有两个主要的子接口:List和Set。其中,List是一个有序的...
删除集合中指定的元素 7 intersection() 返回集合的交集 8 intersection_update() 返回集合的交集。 9 isdisjoint() 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。 Set(集合)——函数 ...
(2)集合元素的查看与删除 集合对象是无序的,因此无法直接查看里面的数据,可以将集合转换为列表进行查看,或使用pop()方法进行查看,但是pop()方法用于随机删除并返回集合中的一个元素,如果集合为空则抛出异常;...
redis命令集合,redis命令详解 适合全体类型的命令 EXISTS key 判断一个键是否存在;存在返回 1;否则返回0; DEL key 删除某个key,或是一系列key;DEL key1 key2 key3 key4 TYPE key 返回某个key元素的数据类型 ( none:...