一个List,怎么删除其中不想要的元素
来源:互联网 发布:网络服务商的英文缩写 编辑:程序博客网 时间:2024/04/30 09:22
对于一个List怎么删除不想要的元素,这样写为什么会报错呢
List list = new ArrayList<String>();for(String str:list){ if(str.length()<5){ list.remove(str); }}
上述代码报错是为什么呢?
2012-05-27 15:00:32回复
- 一个List,怎么删除其中不想要的元素
- List遍历的时候将其中的元素删除掉
- JAVA遍历List集合并删除其中的元素
- Java遍历List集合并删除其中的元素
- 遍历List,删除其中元素的正确做法
- C# List 删除其中一段元素
- 一张图片有两个小图,想要其中的一个,怎么写代码?
- list集合删除其中一个后,设置下一个的方法
- SQL中查询有很多字段,就不想要其中一个的方法
- c#一个list去掉其中重复元素
- List集合删除元素的时候删除不掉
- List集合删除元素的时候删除不掉
- List集合删除元素,该怎么删除?
- 两个集合有共同元素,其中一个集合删除两个集合共同的元素
- 过滤数组中不想要的元素
- JAVA List<Integer>不根据下标删除特定的元素
- 在不改变顺序表元素之间的顺序的情况下,删除其中相同的元素。
- Python代码实现:删除一个list里面的重复元素
- Android初试--开发、运行、卸载第一个Android应用
- IE6 支持PNG图片透明
- libxml2.dylb 添加后 引用不了<libxml/tree.h>
- Polymorphism in JavaScript(javascript中的多态)
- 堆排序
- 一个List,怎么删除其中不想要的元素
- java 泛型详解
- luncene 传智播客--luncene(汤阳光)
- vc中release和debug的区别
- sql server导入数据(适用于2008 , 2005)
- INI配置文件的格式
- libgdx 中文输入
- 跟我一起写Makefile 博客索引
- INI文件格式及其读写
可能会陷入死循环(你用debug模式跑一下就知道了),还有就是你向list里边添加元素了么。
for(String str:list)迭代时你强制转换为String类型的了,所以报错;
改为:List<String> list = new ArrayList<String>();
2.从后面删除
List<String> list = new ArrayList<String>();
for (int i = list.size() - 1; i >= 0; i--) {
String str = list.get(i);
if (str.length() < 5) {
list.remove(str);
}
}
有哪位大侠知道,出现这种情况的原因吗?
还有为什么,用Iterator的remove()方面能解决问题呢?
第一,你一边迭代,一边删,本来从逻辑上就是有可能有问题的
第二,java集合类为了防止上述潜在的问题,制定了规则,不允许你在迭代的过程中删除(具体做法是在迭代器构造的时候,记录当前的modCount,如果迭代过程中发现modCount被修改了,就抛出异常)modCount是一个计数器,每当集合类发生变化了(比如调用过remove)了,就会执行类似于++modCount的操作。
第三,如果一定要删,那么用迭代器的删除。因为迭代器的删除方法会更新modCount
另,6楼的方法二 目测是可以的,没有试过,但看起来是可行的思路。
其实正着迭代也是可以的,只不过i++不能写在for里面,而是要根据删除成功与否来自增。重点在于,你不要用foreach的语法,那样会调用迭代器。6楼的方法2是自己维护迭代的下标,因此不会抛出那个异常。