本帖最后由 ixiangfeng 于 2013-10-15 20:34 编辑
- import java.util.*;
- public class IteratorErrorTest
- {
- public static void main(String[] args) throws Exception
- {
- //创建一个集合
- Collection books = new HashSet();
- books.add("轻量级Java EE企业应用实战");
- books.add("疯狂Java讲义");//(1)
- books.add("疯狂Android讲义");//(2)
- //获取books集合对应的迭代器
- Iterator it = books.iterator();
- while(it.hasNext())
- {
- String book = (String)it.next();
- System.out.println(book);
- if (book.equals("疯狂Android讲义"))
- {
- //使用Iterator迭代过程中,不可修改集合元素,下面代码引发异常
- books.remove(book);
- }
- }
- System.out.println(books);
- }
- }
复制代码 结果:- 轻量级Java EE企业应用实战
- 疯狂Android讲义
- Exception in thread "main" java.util.ConcurrentModificationException
- at java.util.HashMap$$$$$$$$$$$$$$$$HashIterator.nextEntry(HashMap.java:806)
- at java.util.HashMap$$$$$$$$$$$$$$$$KeyIterator.next(HashMap.java:841)
- at IteratorErrorTest.main(IteratorErrorTest.java:26)
复制代码 为什么没有输出 "疯狂Java讲义" 而能输出 "疯狂Android讲义" ?
HashSet集合不是应该没有顺序的吗?
把(1)和(2)行代码顺序换一下不会有异常出现,为什么?
|