黑马程序员技术交流社区
标题:
关于迭代器中不能使用集合方法操作同一集合元素的疑问
[打印本页]
作者:
lumingbi
时间:
2014-4-13 21:01
标题:
关于迭代器中不能使用集合方法操作同一集合元素的疑问
迭代器中不能使用集合方法操作同一集合元素,我的问题是:
是否只是不能用添加(add())与删除(remove())方法,而其它的集合方法如set()方法是可以使用的?
作者:
展展
时间:
2014-4-13 21:09
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
作者:
不似侽紸角.
时间:
2014-4-13 22:11
本帖最后由 不似侽紸角. 于 2014-4-13 22:34 编辑
嗯 用Iterator接口跌代的话是不能集合方法增删的,会引起并发异常
想要增删的话,需要使用Iterator的子类 ListIterator接口,方法就可以了,
就是在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。
但set();方法不会抛异常! 因为没有改变原数组的长度。
作者:
不似侽紸角.
时间:
2014-4-13 22:30
不似侽紸角. 发表于 2014-4-13 22:11
嗯 用Iterator接口跌代的话是不能集合方法增删的,会引起并发异常
想要增删的话,需要使用Iterator的子类 L ...
不好意思,是可以使用Set();方法的,但不能增删!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2