Add elements to a List while iterating over it. (Java) [duplicate]

无人久伴 提交于 2019-11-27 04:45:20

You can't modify a Collection while iterating over it using an Iterator, except for Iterator.remove().

However, if you use the listIterator() method, which returns a ListIterator, and iterate over that you have more options to modify. From the javadoc for add():

The new element is inserted before the implicit cursor: ... a subsequent call to previous() would return the new element

Given that, this code should work to set the new element as the next in the iteration:

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

This will work except when the list starts iteration empty, in which case there will be no previous element. If that's a problem, you'll have to maintain a flag of some sort to indicate this edge case.

There might be some trick with ListIterator, but the easiest solution is probably an old style index loop. Verify performance isn't an issue (no linked lists - but ArrayList is fine).

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
}

How about

List<Foo> fooList = getFooList();
List<Foo> tempFooList = new ArrayList<Foo>()


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

fooList.addAll(tempFooList);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!