2010-05-10 16 views
5

En C + se pueden usar iteradores para escribir en una secuencia. El ejemplo más simple sería:¿Hay un iterador modificable en Java?

vector<int> v; 
for (vector<int>::iterator it = v.begin(); it!=v.end(); ++it) { 
    *it = 42; 
} 

Necesito algo más complicado: mantener iterator como miembro de la clase para un uso posterior. Pero no sé cómo obtener este comportamiento de los iteradores de Java.

¿Hay iteradores escribibles en Java?
Si no, ¿qué los reemplaza?

Respuesta

8

El ListIterator (que se puede obtener por List#listIterator()) tiene add() y set() métodos que le permite insertar y reemplazar el elemento en el índice Actualmente iterado respectivamente. Hasta aquí, es el único "iterador grabable" que se me ocurre en Java.

No estoy seguro si ese es el reemplazo exacto del código dado de C++ ya que no conozco C++.

+0

Gracias. ¿Hay algo así para las matrices? –

+2

@Lukasz: puede convertir una matriz en una lista (en tiempo constante) con 'Arrays.asList' y luego obtener un ListIterator de eso. – sepp2k

+1

No, deberías preferir 'List' sobre array. La 'Lista' es la abstracción de Java de una matriz y puede usar' ArrayList' para tener una matriz expansible dinámicamente. Para obtener más información sobre 'List' (que es parte de la API de colecciones de Java), consulte [el tutorial de Sun sobre el tema] (http://java.sun.com/docs/books/tutorial/collections/index.html). – BalusC

2

Como las matrices se pueden acceder de forma directa y rápida por su índice, realmente no necesita un objeto iterador. ¿No sería suficiente guardar el índice de la matriz en ese miembro de la clase? Esto permitiría leer y escribir el valor de la matriz.

PD: Podría utilizar una ArrayList, que es un conjunto de matrices que crece automáticamente y usar el ListIterator como Balus describió para usar el enfoque iterador-objeto.

+0

Establecer un valor int no será suficiente. Necesito tanto int como array. –

0

Parece que desea más un List (o tal vez alguna otra colección, como Set) o una matriz.

Además, puede hacer que su contenido sea mutable. Parece tonto para enteros, pero continuando con su ejemplo

for (MutableInteger i : CollectionOfMInts) i.setTo(42); 
Cuestiones relacionadas