236 votes

Java Jeu de conserver l'ordre?

Un Jeu Java conserver l'ordre? Une méthode est de retour d'un Jeu pour moi et soi-disant les données est ordonné, mais une itération sur l'Ensemble, les données n'est pas ordonné. Est-il une meilleure façon de gérer cela? La méthode devra être modifié pour revenir à quelque chose d'autres qu'un Ensemble?

350voto

NPE Points 169956

L' Set interface n'offre aucune des garanties de classement.

Il est sous-interface, SortedSet, représente un ensemble qui est triée en fonction de certains critères. Dans la version 6 de Java, il y a deux conteneurs standard qui implémentent SortedSet. Ils sont TreeSet et ConcurrentSkipListSet.

En plus de l' SortedSet interface, il y a aussi l' LinkedHashSet classe. Il se souvient de l'ordre dans lequel les éléments ont été insérés dans le jeu et retourne à ses éléments dans l'ordre.

142voto

infgeoax Points 1041

LinkedHashSet est ce que vous avez besoin. Ou pourquoi ne pas simplement utiliser la liste.

19voto

Lakshman Points 61

Comme beaucoup de membres ont suggéré d'utiliser LinkedHashSet de conserver l'ordre de la collection. U peut envelopper votre jeu à l'aide de cette mise en œuvre.

SortedSet mise en œuvre peut être utilisé pour l'ordre de tri mais pour votre usage LinkedHashSet.

Également de la documentation,

"Cette mise en œuvre de pièces de rechange de ses clients de l'une quelconque, généralement chaotique de commande fourni par HashSet, sans encourir de l'augmentation des coûts associés à TreeSet. Il peut être utilisé pour la production d'une copie d'un jeu qui a le même ordre que l'original, quelle que soit l'origine de l'ensemble de la mise en œuvre:"

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

18voto

shuuchan Points 775

Ensemble est juste une interface. Afin de conserver l'ordre, vous devez utiliser une mise en œuvre spécifique de l'interface et de la sous-interface SortedSet, par exemple TreeSet ou LinkedHashSet. Vous pouvez envelopper votre Mis de cette façon:

Set myOrderedSet = new LinkedHashSet(mySet);

3voto

hmjd Points 76411

À partir de la javadoc pour Set.iterator():

Retourne un itérateur sur les éléments de cet ensemble. Les éléments sont retournés dans aucun ordre particulier (à moins que cet ensemble est une instance d'une classe qui fournit une garantie).

Et, comme déjà indiqué par shuuchan, un TreeSet est une mise en œuvre de l' Set qui a une garantie de l'ordre:

Les éléments sont classés à l'aide de leur ordre naturel, ou par un Comparateur fourni à définir l'heure de création, selon le constructeur est utilisé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X