一个List,怎么删除其中不想要的元素 List<String> list = new ArrayList<String>(); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可能会陷入死循环(你用debug模式跑一下就知道了),还有就是你向list里边添加元素了么。 因为List list = new ArrayList<String>();在声明时不知道list里面装的到底是声明类型,而for(String str:list)迭代时你强制转换为String类型的了,所以报错;改为:List<String> list = new ArrayList<String>(); 我估计楼主不是想说这个问题吧,应该是说这样之后抛出java.util.ConcurrentModificationException异常吧! http://topic.csdn.net/u/20100518/22/b4b21fee-e299-4913-aaec-faea70741676.html 1.用迭代器的remove方法删除。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); } } 我用的时6楼的方法一,可以解决问题有哪位大侠知道,出现这种情况的原因吗?还有为什么,用Iterator的remove()方面能解决问题呢? 第一,你一边迭代,一边删,本来从逻辑上就是有可能有问题的第二,java集合类为了防止上述潜在的问题,制定了规则,不允许你在迭代的过程中删除(具体做法是在迭代器构造的时候,记录当前的modCount,如果迭代过程中发现modCount被修改了,就抛出异常)modCount是一个计数器,每当集合类发生变化了(比如调用过remove)了,就会执行类似于++modCount的操作。第三,如果一定要删,那么用迭代器的删除。因为迭代器的删除方法会更新modCount 另,6楼的方法二 目测是可以的,没有试过,但看起来是可行的思路。其实正着迭代也是可以的,只不过i++不能写在for里面,而是要根据删除成功与否来自增。重点在于,你不要用foreach的语法,那样会调用迭代器。6楼的方法2是自己维护迭代的下标,因此不会抛出那个异常。 java动态代理 怎样才能拖拽Jpanel内部的Jpanel呢 JAVA这句话怎么解释 求一字符替换的正则表达式!!!!!!!!!!! 越简单越好!`~~~ 新手请教,发布网站的详细过程,主机用adsl上网 请问高手解释什么是字节码校验器,类加载器 急!!!关于用jar命令打包后,怎样才能双击执行的问题 两个相对独立的过程??? finalize()方法 熟悉Visual Age的请进(非编码问题) SCJP的请看过来!!!此题的正确答案为???? 这个Sausage类“声明”了几个方法? 新手求解关于循环创建对象问题
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
其实正着迭代也是可以的,只不过i++不能写在for里面,而是要根据删除成功与否来自增。重点在于,你不要用foreach的语法,那样会调用迭代器。6楼的方法2是自己维护迭代的下标,因此不会抛出那个异常。