A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yninggis 中级黑马   /  2014-11-23 20:31  /  1391 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

飞哥,有个地方不太理解,请帮忙解释下:
毕向东_java基础视频教程第14天-05-集合框架(ListIterator)中有下面这个知识点:
利用迭代器读取元素时,迭代过程中,使用集合引用添加或删除元素会出现异常,视频中的解释是:“利用集合引用添加元素,迭代器不知道,所以出现异常。”
这个解释我还是不太明白,能不能更详细解释一下,为什么用集合引用添加元素,之前的迭代器就识别不了了?迭代器只要往下读取集合元素不就行了么?异常代码如下:
ArrayList al = new ArrayList();
al.add("java01");
al.add("java02");

Iterator it = al.iterator();
while (it.hasNext())
{
    Object obj = it.next();
    if(obj.equals("java02"))  //当迭代器读取到“java02”时,给集合添加“java03”
         al.add("java03");
}

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

4 个回复

倒序浏览
迭代器操作集合的时候不能使用集合的引用来操作集合,两个不同的对象操作同一个数据,会抛出异常。
回复 使用道具 举报
在用迭代器或者高级for循环的时候都不出添加或删除的,当你在做这样的操作的时候集合的范围都在改变了。可以用ListIterator,这个可以添加删除
回复 使用道具 举报 1 0
本帖最后由 FlyFish 于 2014-11-25 10:06 编辑

迭代器对象和集合对象共同操作集合中的元素,视为两个对象同时操作数据,会产生安全问题。ListIterator具备(Iterator+集合的增和改功能)增删改查功能,只用此列表迭代器操作元素时,仅仅是一个对象对集合操作,安全问题就不存在了。ListIterator为List体系特有。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
这个需要看看底层的代码,利用了角标cursor 和 size() 判断关系,外部类中的 modCount 与 内部类中的modCountException关系
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马