import java.util.Collection; import java.util.HashSet; import java.util.Iterator; public class IteratorTest { public static void main(String[] args) { // 创建一个集合 Collection objs = new HashSet(); objs.add("C语言中文网Java教程"); objs.add("C语言中文网C语言教程"); objs.add("C语言中文网C++教程"); // 调用forEach()方法遍历集合 // 获取books集合对应的迭代器 Iterator it = objs.iterator(); while (it.hasNext()) { // it.next()方法返回的数据类型是Object类型,因此需要强制类型转换 String obj = (String) it.next(); System.out.println(obj); if (obj.equals("C语言中文网C语言教程")) { // 从集合中删除上一次next()方法返回的元素 it.remove(); } // 对book变量赋值,不会改变集合元素本身 obj = "C语言中文网Python语言教程"; } System.out.println(objs); } }从上面代码中可以看出,Iterator 仅用于遍历集合,如果需要创建 Iterator 对象,则必须有一个被迭代的集合。没有集合的 Iterator 没有存在的价值。
public class IteratorErrorTest { public static void main(String[] args) { // 创建一个集合 Collection objs = new HashSet(); objs.add("C语言中文网Java教程"); objs.add("C语言中文网C语言教程"); objs.add("C语言中文网C++教程"); // 获取books集合对应的迭代器 Iterator it = objs.iterator(); while (it.hasNext()) { String obj = (String) it.next(); System.out.println(obj); if (obj.equals("C语言中文网C++教程")) { // 使用Iterator迭代过程中,不可修改集合元素,下面代码引发异常 objs.remove(obj); } } } }输出结果为:
C语言中文网C++教程
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextNode(Unknown Source)
at java.util.HashMap$KeyIterator.next(Unknown Source)
at IteratorErrorTest.main(IteratorErrorTest.java:15)
本文链接:http://task.lmcjl.com/news/10837.html