Collection类返回一个Iterator之后,其实会创建一个指向原来对象的单链索引表,当原来的对象数量发生变化的时候,这个单链索引表的内容不会同步改变,所以当索引指针往后移动的时候,找不到要找的对象,就会按照fail-fast原则(快速失败原则),Iterator马上跑出java.util.ConcurrentModificationException异常。换一个说法,也就是,在Iterator工作的时候,是不允许被迭代的对象改变的。
避免抛出这个异常的方法是:不适用Collection自身的remove()方法,而使用Iterator本身的方法remove()来删除对象,因为这样子可以删掉原对象,同时当前迭代对象的索引也得到同步。
联系客服