在循环访问列表时向列表中添加元素。(爪哇)
2022-09-01 03:08:26
可能的重复:
Java:在迭代期间向集合添加元素
我的问题是,我想在迭代列表时使用新元素扩展它,并且我希望迭代器继续使用我刚刚添加的元素。
根据我的理解,在列表中的当前元素之前添加一个元素,而不是在它之后。是否有可能以其他方式实现这一目标?ListIterator.add()
可能的重复:
Java:在迭代期间向集合添加元素
我的问题是,我想在迭代列表时使用新元素扩展它,并且我希望迭代器继续使用我刚刚添加的元素。
根据我的理解,在列表中的当前元素之前添加一个元素,而不是在它之后。是否有可能以其他方式实现这一目标?ListIterator.add()
在使用 迭代集合时,不能修改该集合,但 除外。Iterator
Iterator.remove()
但是,如果使用 listIterator()
方法,该方法返回 一个 ,并循环访问该方法,则有更多的选项需要修改。从 javadoc 中为 :ListIterator
add()
新元素插入到隐式游标之前:...后续调用 将返回新元素
previous()
鉴于此,此代码应努力将新元素设置为迭代中的下一个元素:
ListIterator<T> i;
i.add(e);
i.previous(); // returns e
i.previous(); // returns element before e, and e will be next
这将起作用,除非列表开始迭代为空,在这种情况下,将没有以前的元素。如果这是一个问题,您必须维护某种标志来指示此边缘情况。
ListIterator可能有一些技巧,但最简单的解决方案可能是旧式索引循环。验证性能不是问题(没有链表 - 但 ArrayList 很好)。
List<Object> 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
}