java中使用迭代器进行遍历集合的注意点
2017-07-11 00:00
411 查看
java中进行遍历集合时,不能对集合的add和remove方法进行操作。
增加元素:
改代码的结果会造成死循环。
删除元素:
这种方式的问题在于,删除某个元素后,list的大小发生了变化,而你的索引也在变化,所以会导致你在遍历的时候漏掉某些元素。比如当你删除第1个元素后,继续根据索引访问第2个元素时,因为删除的关系后面的元素都往前移动了一位,所以实际访问的是第3个元素。因此,这种方式可以用在删除特定的一个元素时使用,但不适合循环删除多个元素时使用。
这种方式的问题在于,删除元素后继续循环会报错误信息ConcurrentModificationException,因为元素在使用的时候发生了并发的修改,导致异常抛出。但是删除完毕马上使用break跳出,则不会触发报错。
这种方式可以正常的循环及删除。但要注意的是,使用iterator的remove方法,如果用list的remove方法同样会报上面提到的ConcurrentModificationException错误。
增加元素:
import java.util.ArrayList; import java.util.Iterator; public class Test002 { public static void main(String[] args) { ArrayList<String> arrayList = new ArrayList<String>(); arrayList.add("aaa"); arrayList.add("ddd"); arrayList.add("eee"); for(int i=0; i<arrayList.size(); i++) { arrayList.add("ggg"); System.out.println(arrayList.get(i)); } } }
改代码的结果会造成死循环。
删除元素:
public class Test002 { public static void main(String[] args) { ArrayList<String> arrayList = new ArrayList<String>(); arrayList.add("aaa"); arrayList.add("ddd"); arrayList.add("eee"); for(int i=0; i<arrayList.size(); i++) { arrayList.remove("aaa"); } } }
这种方式的问题在于,删除某个元素后,list的大小发生了变化,而你的索引也在变化,所以会导致你在遍历的时候漏掉某些元素。比如当你删除第1个元素后,继续根据索引访问第2个元素时,因为删除的关系后面的元素都往前移动了一位,所以实际访问的是第3个元素。因此,这种方式可以用在删除特定的一个元素时使用,但不适合循环删除多个元素时使用。
public class Test002 { public static void main(String[] args) { ArrayList<String> arrayList = new ArrayList<String>(); arrayList.add("aaa"); arrayList.add("ddd"); arrayList.add("eee"); for(String str : arrayList) { if ("ddd".equals(str)) { arrayList.remove(str); } } } }
这种方式的问题在于,删除元素后继续循环会报错误信息ConcurrentModificationException,因为元素在使用的时候发生了并发的修改,导致异常抛出。但是删除完毕马上使用break跳出,则不会触发报错。
public class Test002 { public static void main(String[] args) { ArrayList<String> arrayList = new ArrayList<String>(); arrayList.add("aaa"); arrayList.add("ddd"); arrayList.add("eee"); while (iter.hasNext()) { String str =iter.next(); if ("ddd".equals(str)) { arrayList.remove("ddd"); //iter.remove(); } } } }
这种方式可以正常的循环及删除。但要注意的是,使用iterator的remove方法,如果用list的remove方法同样会报上面提到的ConcurrentModificationException错误。
相关文章推荐
- Java使用增强for循环和迭代器遍历Map集合
- 【Java编程】使用增强for循环和迭代器遍历Map集合
- 对JAVA集合进行遍历删除时务必要用迭代器
- 集合遍历与迭代器注意事项--Java基础075
- 迭代(遍历)时候不可以使用集合的remove和add方法,但可使用Java迭代器的remove和add方法
- 对JAVA集合进行遍历删除时务必要用迭代器
- 【Java编程】使用增强for循环和迭代器遍历Map集合
- java中使用for遍历集合是注意的空指针异常
- Java类集框架——Iterator和ListIterator 迭代器的使用(遍历集合)
- 对JAVA集合进行遍历删除时务必要用迭代器
- 对JAVA集合进行遍历删除时务必要用迭代器 推荐
- 使用java的迭代器对list进行遍历
- 使用迭代器遍历集合时,当集合中的数据发生变化是会抛出java.util.ConcurrentModificationException异常
- Java 在使用迭代器迭代集合的过程中的注意事项
- 对JAVA集合进行遍历删除时务必要用迭代器
- JAVA提高篇(31)--Iterator和ListIterator 迭代器的使用(遍历集合)
- Java使用HashMap进行遍历时候需要注意的几点
- 对JAVA集合进行遍历删除时务必要用迭代器
- JAVA使用增强for循环和迭代器遍历Map集合
- Java基础知识强化之集合框架笔记08:Collection集合自定义对象并遍历案例(使用迭代器)