2012-02-27 628 views
13

Tengo un java ArrayList al que agrego 5 objetos.Orden de recuperación de la lista de matrices

Si repito la lista e imprimo, repite la lista e imprima de nuevo.

¿El orden de recuperación en estos 2 casos será el mismo? (Sé que puede ser diferente del pedido de inserción)

Respuesta

22

Sí, suponiendo que no ha modificado la lista en el medio. De http://docs.oracle.com/javase/6/docs/api/java/util/List.html:

iterador

Iterator<E> iterator()

un iterador sobre los elementos de esta lista en la secuencia apropiada.

un poco vago, tal vez, pero en otras partes de esa página, se define este término:

secuencia apropiada (del primero al último elemento)

+1

Podrían haberlo hecho mejor que decir 'secuencia correcta' :-) –

+4

@TheNail - Bueno, los documentos para 'List' dicen al principio que' List' es "Una colección ordenada (también conocida como _secuencia_)." –

2

Si no está mutando la lista, el orden de iteración seguirá siendo el mismo. Las listas tienen un pedido especificado contractualmente y la especificación iterator garantiza que itera sobre los elementos en ese orden.

-2

Incluso conjuntos volverán el mismo resultado, si no los modifica (agregando o quitando elementos a ellos).

+2

En la práctica, esto a menudo es cierto, pero no está garantizado (¡excepto para SortedSet!). En teoría, podría encontrarse con un Conjunto que reorganiza su estructura interna detrás de las escenas ... – DNA

+2

No hay garantía de que un Conjunto no se reorganice internamente en ningún momento. No hay garantía de que las iteraciones del conjunto estén en un orden particular o que el orden no cambie de un iterador a otro. –

+0

Consulte también esta * pregunta relacionada pero no la misma * AS y su respuesta: http://stackoverflow.com/questions/2704597/iteration-order-of-hashset –

6

Está en la especificación de la interfaz List para conservar el orden.

Son las clases Set que no conservan el orden.

1

La recuperación no varía a menos que cambie el iterador que está utilizando. Siempre que use el mismo método para la recuperación y no haya cambiado la lista, los artículos serán devueltos en el mismo orden.

1

Cuando agrega un elemento a una ArrayList utilizando add(E e), el elemento se agrega al final de la lista. En consecuencia, si todo lo que hace es llamar al método add de argumento único varias veces y luego iterar, la iteración estará exactamente en el mismo orden que las llamadas al add.

1

El orden de iteración será el mismo cada vez que itere sobre la misma lista no modificada.

Además, suponiendo que agrega los elementos usando el método add(), el orden de iteración se ser el mismo que el orden de inserción ya que este método añade elementos al final de la lista.

10

(Sé que puede ser diferente del orden de inserción)

No, no lo hará.El contrato de List requiere que el orden add sea el mismo que el orden de iteración, ya que add se inserta al final y iterator produce un iterador que itera de principio a fin en orden.

Set no requiere esto, por lo que puede confundir el contrato de Set y List con respecto al orden de iteración.

Desde el Javadoc:

Iterator<E> iterator()

un iterador sobre los elementos de esta lista en la secuencia apropiada.

2

Sí, un ArrayList garantías de iteración orden sobre sus elementos - es decir, que va a salir en el mismo orden en que se insertó, a condición de que usted no hace ninguna inserción, mientras que la iteración en la ArrayList.

-1

Sí, la orden de recuperación garantiza que será la misma siempre que la lista no esté mutada y utilice el mismo repetidor, pero tener que confiar en el orden de recuperación indica algo sospechoso con el diseño. En general, no es una buena idea basar la lógica comercial en un determinado orden de recuperación.

+0

Esta respuesta es más o menos una repetición de las respuestas existentes. –

Cuestiones relacionadas