迭代时向元素添加元素。 (Java)

可能重复:
Java:在迭代期间向集合添加元素

我的问题是,我想在迭代它时使用新元素扩展一个列表,我希望迭代器继续我刚添加的元素。

根据我的理解, ListIterator.add()在列表中的当前元素之前添加元素,而不是在它之后。 是否有可能以其他方式实现这一目标?

除了Iterator.remove()之外,您无法在使用Iterator迭代它时修改Collection。

但是,如果您使用listIterator()方法,该方法返回一个ListIterator ,并迭代它,您有更多选项可以修改。 从javadoc for add()

在隐式游标之前插入新元素:…对previous()的后续调用将返回新元素

鉴于此,此代码应该用于将新元素设置为迭代中的下一个元素:

 ListIterator i; i.add(e); i.previous(); // returns e i.previous(); // returns element before e, and e will be next 

这将起作用,除非列表开始迭代为空,在这种情况下将没有前一个元素。 如果这是一个问题,你将不得不维护某种标志来表明这种边缘情况。

怎么样

 List fooList = getFooList(); List tempFooList = new ArrayList() for(Foo f : fooList) { ... // add items that need to be added to temp tempFooList.add(new Foo()); ... } fooList.addAll(tempFooList); 

ListIterator可能有一些技巧,但最简单的解决方案可能是旧式索引循环。 validation性能不是问题(没有链表 – 但ArrayList很好)。

 List myList; for(int i = 0; i < myList.size(); i++) { Object current = myList.get(i); // Anything you insert after i will be discovered during next iterations }