J'ai besoin d'un ensemble de objets triés et je suis actuellement en utilisant le Quelle alternative à Cas d'utilisation: J'ai un ensemble d'objets affichables. Je veux les trier par y par une coordonnée, de sorte qu'elles soient rendues dans le bon ordre. Bien sûr, deux objets peuvent bien avoir la même coordonnée y. P> arbreset code>. Mon problème est que le
comparèteo code> des objets retournera souvent
0 code>, ce qui signifie que l'ordre de ces deux objets doit être laissé inchangé.
Treemap code> (utilisé par
arbreset code> par défaut) les considérera alors comme le même objet, qui n'est pas vrai. P>
Treemap code> puis-je utiliser? p>
5 Réponses :
J'ai une idée de la mienne, mais c'est plus d'une solution de contournement
Vous définissez un critère à comparer, mais vous devez ajouter des critères supplémentaires.
Vous dites: p>
j'ai un ensemble d'objets affichables. Je veux les trier par y par une coordonnée, de sorte qu'elles soient rendues dans le bon ordre. Bien sûr, deux objets peuvent bien avoir la même coordonnée y. Em> p> BlockQuote>
Donc, si deux éléments ont la même coordonnée y, ce que vous avez mis en premier? Quels seraient les autres critères? p>
Il peut s'agir du temps de création, il peut s'agir de la coordonnée X, il vous suffit de le définir: p>
xxx pré> Vous devez définir quand on doit définir une fois que vous devez définir une fois < Code> Thing Code> est plus élevé / inférieur / inférieur / égal / à autre
chose code>. Si l'un des attributs est identique à celui des autres, vous ne devriez probablement pas les déplacer. Si existe-t-il un autre attribut pour comparer l'utilisation. p> p>
Une déclaration si! Pourquoi n'a-t-je pas pensé à cela et écriva-t-on un piratage changeant laide: p
Lol ... Parfois, notre esprit iTère trop loin et nous avons juste besoin de quelqu'un de l'extérieur pour nous faire regarder dans la direction évidente i>. Où sont mon glasse? - EHRM ... vous les portez I> Sorte de :)
Il y a 2 choses importantes à mémoriser lors de l'utilisation des ensembles de tri (par exemple: P>
1) ils sont des ensembles; deux éléments égaux ne sont pas autorisés dans la même collection p>
2) L'égalité doit être cohérente avec le mécanisme de comparaison (comparateur ou comparable) p>
Par conséquent, dans votre cas, vous devriez "briser les critères" en ajoutant des critères de commande secondaire. Par exemple: utilisez d'abord Y Axe Y, puis x, puis un identifiant d'objet unique. P>
Voir aussi http://eyalsch.wordpress.com/2009/11/ 23 / comparateurs / p>
Le problème que vous rencontrez est que soit ré-écrire votre comparèteo code> renvoie
0 code> signifie que les objets sont égaux. Dans le même temps, vous les mettez dans un ensemble, ce qui n'autorise pas plusieurs copies d'éléments égaux. P>
comparèteo code> de sorte que les éléments inégaux renvoient des valeurs différentes ou utilisent quelque chose comme un
java.util.priorityqueue code> qui permet plusieurs copies d'éléments égaux. < / p>
Je l'ai déjà fait. C'est une carte multi-carte ordonnée et il s'agit simplement d'un escimap d'objets de liste. Comme ceci ..
size (1) = 2 size (2) = 3 size (3) = 2 Total size = 7 {1=[Value1, Value4], 2=[Value2, Value6, Value7], 3=[Value3, Value5]}
Si deux éléments ont la même coordonnée y, ce que vous vous b> Mettez en premier? Y a-t-il un autre critère?