Trier une liste !!

super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 - 7 mars 2006 à 11:52
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 - 13 mars 2006 à 13:47
Bonjour,

voila, j galere depuis ce matin à essayer de trier un TreeSet.
je m expliquue : normalement un TreeSet est toujours trié mais qd on modifie un de ses objets (ce qui peut changer l ordre du tri) ben il se met pas a jour.
J ai essayer de trouver des fct avec Collection de sun ou encore CollectionUtils d apache mais rien.
Ca m etonne qd mm qu en ayant un comparator j soit pas foutu de trier ce truc !!
bref si qqun a une idée j lui en serait tres reconnaissant
(j ai parié un coup a boire que c t faisable)
Merci
++ Toinou
PS: il me faut une fct qui ne change pas l implémentation de mon objet, je dois pas recreer une List puis la trier puis creer un TreeSet!!

5 réponses

kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 9
8 mars 2006 à 16:28
Salut,

le tri est effectué lors des opérations d'ajout ou de suppression, c'est donc normal que ton TreeSet ne se mette pas à jour quand tu modifies un objet.
Il n'y a pas d'évenement lancé lors de la modification d'un objet, donc le treeset ne refera pas le tri tout seul.
La seule solution sans devoir re-trier la liste est que les données que tu modifies n'entrent pas en compte lors du calcul de la clé des objets (les attributs utilisés par le comparator).
Soit tu trouves une clé qui ne bouge pas quelle soit les modifs que tu fais sur tes objets, soit tu tris de temps en temps.
0
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 8
9 mars 2006 à 12:04
ca j avais bien comprit mais ma question c etait plutot est ce que tu connais une méthode pour trier des Set ?? j en ai cherché partout et ca ne marche que sur des list et po des collections (c normal parce qu elle sont pas ordonnées)
il n empeche, je m etonne qu en pouvant récup un comparator de mon treeset je soit pas capable d avoir une méthode simple genre CollectionsUtils.sort(treeset,comparator) qui soit déjà codée
si tu t a déja croisé ce pb j suis preneur!!!
merci
++ Toinou
0
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 9
9 mars 2006 à 13:38
j'ai pas rencontré le pb mais je ferais simplement :

TreeSet courant=...

...

TreeSet nouveauTrie=new TreeSet(courant.comparator());//ou référence sur le comparator, ou référence static, mais on évite la création d'un nouveau comparator

nouveauTrie.addAll(courant);

courant=null; //supprimer de la mémoire

On ne peut pas retrier le treeset car il n'y a pas à proprement parler de tri (les éléments sont placés au bon endroit), c'est juste l'iterator qui nous donne les éléments dans l'ordre du comparator.
Pour refaire le placement, je vois pas d'autre solution que de recréer un nouveau treeset à partir de l'ancien. C'est pas forcément optimable mais avec l'api actuelle, je sais pas faire autrement.
0
super_toinou Messages postés 764 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 8 mars 2011 8
9 mars 2006 à 16:28
j y ai pensé mais j peux pas parce que j ai un objet qui hérite de treeset avec des trucs en + donc résultat si je faisait ca je perdrait ttes mes données spécifiques !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 9
13 mars 2006 à 13:47
mouais et je présume que tes données spécifiques dépendent de ce que tu as mis dans ton treeset ?
A moins de copier toutes les données spécifique dans le nouvel objet, j'ai pas de solution :(
0