7
votes

Careto peut retourner 0, alternative à Arbreset / Treemap

J'ai besoin d'un ensemble de objets triés et je suis actuellement en utilisant le arbreset . Mon problème est que le comparèteo des objets retournera souvent 0 , ce qui signifie que l'ordre de ces deux objets doit être laissé inchangé. Treemap (utilisé par arbreset par défaut) les considérera alors comme le même objet, qui n'est pas vrai.

Quelle alternative à Treemap puis-je utiliser?


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.


1 commentaires

Si deux éléments ont la même coordonnée y, ce que vous vous Mettez en premier? Y a-t-il un autre critère?


5 Réponses :


0
votes

J'ai une idée de la mienne, mais c'est plus d'une solution de contournement xxx

  • Sortkey = Qu'est-ce qui compte vraiment pour le tri, par exemple une coordonnée y
  • SEQ = Un numéro de séquence attribué aux objets lorsqu'il est ajouté à l'ensemble

0 commentaires

9
votes

Vous définissez un critère à comparer, mais vous devez ajouter des critères supplémentaires.

Vous dites:

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.

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?

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: xxx

Vous devez définir quand on doit définir une fois que vous devez définir une fois < Code> Thing est plus élevé / inférieur / inférieur / égal / à autre chose . 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.


2 commentaires

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 . Où sont mon glasse? - EHRM ... vous les portez Sorte de :)



0
votes

Il y a 2 choses importantes à mémoriser lors de l'utilisation des ensembles de tri (par exemple:

1) ils sont des ensembles; deux éléments égaux ne sont pas autorisés dans la même collection

2) L'égalité doit être cohérente avec le mécanisme de comparaison (comparateur ou comparable)

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.

Voir aussi http://eyalsch.wordpress.com/2009/11/ 23 / comparateurs /


0 commentaires

4
votes

Le problème que vous rencontrez est que comparèteo renvoie 0 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.

soit ré-écrire votre comparèteo de sorte que les éléments inégaux renvoient des valeurs différentes ou utilisent quelque chose comme un java.util.priorityqueue qui permet plusieurs copies d'éléments égaux. < / p>


0 commentaires

1
votes

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]}


0 commentaires