metodos - listas en java netbeans ejemplos
Agregar elementos a una lista mientras se itera sobre ella.(Java) (3)
No puede modificar una colección mientras está iterando sobre ella usando un Iterator
, excepto Iterator.remove()
.
Sin embargo, si usa el método listIterator()
, que devuelve un ListIterator
, e itere sobre que tiene más opciones para modificar. Desde el javadoc para add()
:
El nuevo elemento se inserta antes del cursor implícito: ... una llamada posterior a
previous()
devolverá el nuevo elemento
Dado esto, este código debería funcionar para establecer el nuevo elemento como el siguiente en la iteración:
ListIterator<T> i;
i.add(e);
i.previous(); // returns e
i.previous(); // returns element before e, and e will be next
Esto funcionará excepto cuando la lista comience la iteración vacía, en cuyo caso no habrá ningún elemento anterior. Si eso es un problema, deberá mantener una marca de algún tipo para indicar este caso de borde.
Posible duplicado:
Java: agregar elementos a una colección durante la iteración
Mi problema es que quiero expandir una lista con nuevos elementos mientras itero sobre ella y quiero que el iterador continúe con los elementos que acabo de agregar.
Según tengo entendido, ListIterator.add()
agrega un elemento antes del elemento actual en la lista, no después. ¿Es posible lograr esto de alguna otra manera?
Puede haber algún truco con ListIterator, pero la solución más fácil es probablemente un bucle de índice de estilo antiguo. Verificar que el rendimiento no sea un problema (no hay listas vinculadas, pero ArrayList está bien).
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
}
Qué tal si
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);