Évidemment, les ensembles n'ont aucun ordre de commande, je ne peux donc pas m'attendre à un ordre spécifique si je fais Cependant, je suis confronté à un cas d'utilisation où je m'en fiche Ce qui commande le tableau de chaîne est dans, mais j'en ai besoin d'être le cas que si deux ensembles sont égaux les uns aux autres, alors: p> produira la même chaîne exacte Pour les ensembles, toujours, peu importe le nombre de fois où je gère le programme en supposant que je bâille avec le même code. P> ai-je cette garantie? P> L'ordre que les éléments apparaissent pour un ensemble donné dans un itérateur? P> P>
6 Réponses :
En général, vous ne pouvez pas garantir l'ordre d'un définir code> comme vous le mentionnez, même si cela fonctionne maintenant, ce n'est peut-être pas à l'avenir. Cependant, vous peut em> garantir l'ordre d'un
LinkedHashSet code>
afin que vous puissiez simplement l'utiliser. Cela ne fonctionne que si les ensembles avaient cependant les éléments insérés dans le même ordre. Si vous n'avez pas cette situation, vous devez probablement juste trier l'ensemble et l'imprimer. P>
Non, absolument pas. Pour un exemple trivial, envisagez:
LinkedHashSet<String> set1 = new LinkedHashSet<String>(); set1.add("x"); set1.add("y"); LinkedHashSet<String> set2 = new LinkedHashSet<String>(); set2.add("y"); set2.add("x");
Vous n'avez pas cette garantie. Il se peut que vous voyiez toujours ce travail, car je soupçonne que la plupart des implémentations de Vous ne pouvez pas compter sur la commande d'un itérateur. p>
Les ensembles sont complètement et totalement non ordonnés. Vous pourriez, en raison du comportement de mise en œuvre, obtenez quelque chose qui ressemble à une commande cohérente en dehors d'eux, mais cela n'est en aucun cas invoqué. P> set.toarray () code> produiront le même commandant pour des ensembles égaux, mais vous ne peut pas strong> s'appuyer sur Ceci. p>
Techniquement, non, vous n'avez pas de garantie. Forcer le problème en triant le tableau vous-même après avoir extrait les résultats de l'ensemble. P> SET code> est une interface. Les implémentations varieront et peuvent ou non obéir à cette exigence. P>
Merci. Toutes les grandes réponses ici (précipitées toutes) mais celle-ci donne une solution claire. Je vais "forcer la question".
qui serait complètement dépendant de la mise en œuvre code> code>. de la Javadoc pour set.totarray (): p>
Si cet ensemble effectue des garanties sur quel ordre ses éléments sont renvoyés par son itérateur, cette méthode doit renvoyer les éléments dans le même ordre. P>
blockQuote> SET code> est une interface, pas une classe et
toarray () code> ne garantit rien, sauf qu'il doit correspondre à l'itérateur de la mise en œuvre. p>
Pour HashSet, vous pouvez ajouter un élément dans le même ordre et obtenir des commandes différentes en fonction de la capacité et du facteur de charge. P>
Voici un exemple où vous pouvez avoir de nombreuses commandes différentes de la même collection. P>
http: // vanillajava. blogspot.co.uk/2011/09/Ordon-Of-Element-in-hash-collection.html p>
Un de côté: "Java" n'est pas un acronyme.
L'ensemble peut avoir une commande. Par exemple, Arbreset.
@kukudas J'ai vraiment pensé que "Aucun ordre" était l'une des exigences de facto d'un ensemble. Merci!