java中foreach语句中使用remove时出现的问题
2018-03-23 14:27
225 查看
先粘上测试代码:
public class test {
public static void main(String[] args) {
List<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
for(Integer i:list)
{
if(i.equals(1))
{
list.remove(i);
}
}
}
}
跑出的结果:
分析:
实际上foreach语句内部实现是迭代器,不允许在此中删除之后再次迭代
故若想遍历并remove元素,不能采用迭代器或者是foreach语句,我猜想是因为我使用Iterator进行迭代的同时,移除了其中的对象,破坏了Iterator内部用来迭代的索引。所以抛出异常。
如果使用普通的for循环,自己设定索引i 进行循环,就不会出现此问题
如下
public class test {
public static void main(String[] args) {
List<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
for(int i=0;i<list.size();i++)
{
if(list.get(i).equals(1))
{
list.remove(i);
}
}
System.out.println(list);
}
}
结果:
成功跑出我们想要的结果
public class test {
public static void main(String[] args) {
List<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
for(Integer i:list)
{
if(i.equals(1))
{
list.remove(i);
}
}
}
}
跑出的结果:
分析:
实际上foreach语句内部实现是迭代器,不允许在此中删除之后再次迭代
故若想遍历并remove元素,不能采用迭代器或者是foreach语句,我猜想是因为我使用Iterator进行迭代的同时,移除了其中的对象,破坏了Iterator内部用来迭代的索引。所以抛出异常。
如果使用普通的for循环,自己设定索引i 进行循环,就不会出现此问题
如下
public class test {
public static void main(String[] args) {
List<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
for(int i=0;i<list.size();i++)
{
if(list.get(i).equals(1))
{
list.remove(i);
}
}
System.out.println(list);
}
}
结果:
成功跑出我们想要的结果
相关文章推荐
- 【Java学习笔记之十】Java中循环语句foreach使用总结及foreach写法失效的问题
- Java5新特征之foreach语句使用总结
- 关于Qt使用QSqlQuery执行sql语句时出现out of memory的问题
- Java笔记之语言基础_使用if语句时要注意的问题
- 解决问题: 使用hadoop时出现:java.io.IOException: Bad connect ack with firstBadLink ...
- Java的foreach语句的学习【java的foreach使用for关键字】
- 执行SQL语句时出现问题操作必须使用一个可更新的查询错误的解决方法
- 命令行使用javac及java编译、运行java程序出现的问题(Windows XP)
- 使用Ant编译出现如下问题 java.io.FileNotFoundException: bin\classes.dex
- mybatis的foreach语句使用问题
- java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误
- 使用Foreach时出现的一个小问题
- 使用jikes编译java程序时出现的问题
- 最近开发一个项目使用了Nhibernate出现了如下问题deleted object would be re-saved by cascade (remove deleted object from
- Java5新特征之foreach语句使用总结
- java-foreach语句使用总结
- Java foreach语句的使用
- 在java中ACCESS模糊查询出现的奇怪问题,使用%不行的解决方案。
- java-foreach语句使用总结
- Java:对于Sql语句执行方式不同而出现的问题!列名: 'false' 无效