objetos metodos listas lista enteros ejemplos bidimensional agregar java listiterator

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);