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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

lumingbi

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

迭代器中不能使用集合方法操作同一集合元素,我的问题是:
是否只是不能用添加(add())与删除(remove())方法,而其它的集合方法如set()方法是可以使用的?

3 个回复

倒序浏览
java.util
接口 Iterator<E>
所有已知子接口:
ListIterator<E>, XMLEventReader

方法摘要
boolean hasNext()
          如果仍有元素可以迭代,则返回 true。
E next()
          返回迭代的下一个元素。
void remove()
          从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。



java.util
接口 ListIterator<E>
所有超级接口:
Iterator<E>

方法摘要
void add(E e)
          将指定的元素插入列表(可选操作)。
boolean hasNext()
          以正向遍历列表时,如果列表迭代器有多个元素,则返回 true(换句话说,如果 next 返回一个元素而不是抛出异常,则返回 true)。
boolean hasPrevious()
          如果以逆向遍历列表,列表迭代器有多个元素,则返回 true。
E next()
          返回列表中的下一个元素。
int nextIndex()
          返回对 next 的后续调用所返回元素的索引。
E previous()
          返回列表中的前一个元素。
int previousIndex()
          返回对 previous 的后续调用所返回元素的索引。
void remove()
          从列表中移除由 next 或 previous 返回的最后一个元素(可选操作)。
void set(E e)
          用指定元素替换 next 或 previous 返回的最后一个元素(可选操作)。

这是API文档上的,我只知道一般的只有remove但是list的有set

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 不似侽紸角. 于 2014-4-13 22:34 编辑

嗯 用Iterator接口跌代的话是不能集合方法增删的,会引起并发异常
想要增删的话,需要使用Iterator的子类 ListIterator接口,方法就可以了,
就是在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。

但set();方法不会抛异常! 因为没有改变原数组的长度。
回复 使用道具 举报
不似侽紸角. 发表于 2014-4-13 22:11
嗯 用Iterator接口跌代的话是不能集合方法增删的,会引起并发异常
想要增删的话,需要使用Iterator的子类 L ...

不好意思,是可以使用Set();方法的,但不能增删!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马