41 votos

Java Conjunto de conservar el orden?

Hace un Java Conjunto de conservar el orden? Un método devuelve un juego para mí y que, supuestamente, los datos se ordenaron pero iterar sobre el Conjunto, los datos no están ordenados. Hay una mejor manera de manejar esto? ¿El método necesita ser cambiado a devolver algo distinto de un Conjunto?

71voto

NPE Puntos 169956

El Set interfaz no proporciona garantías de orden.

Es la sub-interfaz, SortedSet, representa un conjunto que se ordenan de acuerdo a algún criterio. En Java 6, hay dos contenedores estándar que implementan SortedSet. Son TreeSet y ConcurrentSkipListSet.

Además de la SortedSet interfaz, también existe la LinkedHashSet de la clase. Recuerda el orden en que los elementos se insertan en el conjunto y devuelve sus elementos en ese orden.

12voto

infgeoax Puntos 1041

LinkedHashSet es lo que usted necesita. O ¿por qué no usar simplemente la lista.

8voto

Lakshman Puntos 61

Como muchos de los miembros sugirió el uso de LinkedHashSet para conservar el orden de la colección. U puede envolver su conjunto el uso de esta aplicación.

SortedSet aplicación puede ser utilizada para la orden, pero para su uso LinkedHashSet.

También a partir de la documentación,

"Esta aplicación repuestos a sus clientes de los no especificados, en general caótico pedido prestados por HashSet, sin incurrir en el aumento de los costos asociados con TreeSet. Puede ser utilizado para producir una copia de un conjunto que tiene el mismo orden que el original, independientemente de la configuración original de la aplicación:"

Fuente : http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashSet.html

7voto

shuuchan Puntos 775

Conjunto es simplemente una interfaz. Con el fin de conservar el orden, usted tiene que utilizar una aplicación específica de la interfaz y la sub-interfaz de SortedSet, por ejemplo TreeSet o LinkedHashSet. Puede ajustar el Conjunto de esta manera:

Set myOrderedSet = new LinkedHashSet(mySet);

3voto

hmjd Puntos 76411

Desde el javadoc de Set.iterator():

Devuelve un iterador sobre los elementos de este conjunto. Los elementos son devueltos en ningún orden en particular (a menos que este conjunto es una instancia de la clase que proporciona una garantía).

Y, como ya se ha dicho por shuuchan, TreeSet es una aplicación de Set que tiene una garantía de orden:

Los elementos se ordenan mediante naturales en sus pedidos, o por un Comparador proporcionada en el momento de la creación, según el cual el constructor se utiliza.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X