[Java] Tri d'un vecteur

Tri d'un vecteur [Java] - Java - Programmation

Marsh Posté le 13-11-2003 à 19:16:01    

je fait comme ceci pour trier mon vecteur :

Code :
  1. class Compar implements Comparator {
  2.         public int compare(Object x, Object y) {
  3.              Candidat c1=(Candidat)x;
  4.              Candidat c2=(Candidat)y;
  5.              return c2.getVal() - c1.getVal();
  6.         }
  7.    }
  8.       Collections.sort(v, new Compar());


 
ca marche tres bien,mais je c il y a une 2e methode avec un equals pour trier  
 
qqn a une idee ?


Message édité par red faction le 13-11-2003 à 19:17:57
Reply

Marsh Posté le 13-11-2003 à 19:16:01   

Reply

Marsh Posté le 13-11-2003 à 19:18:36    

bha non, c'est normal de faire comme ca ...
 
Tu peux aussi faire que ton objet Candidat soit "ordonné" en le faisant implémenter Comparable et dans ce cas il faut que tu implémente également equals pour que quand equals() est vrai, compareTo() retourne 0


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 14-11-2003 à 00:40:58    

voila c fait  
 
mais jai pas eu besoin dimplementer equals vu que je compare juste le nom  
 
 

Code :
  1. public int compareTo(Object o){
  2.       Candidat c = (Candidat)o;
  3.       return name.compareTo(c.name);
  4. Collections.sort(v);
  5.    }


 
c bon comme ca ?


Message édité par red faction le 14-11-2003 à 00:41:31
Reply

Marsh Posté le 14-11-2003 à 00:45:28    

si tu déclares pas le equals, tu casses la logique de ton objet => rien n'est garantit de fonctionner.
 
Rendre un objet Comparable c'ets pas quelque chose d'innocent : ca veut dire que ton objet a un "ordre naturel", comme les Integer ou les String (ordre alphabétique). C'est plutot rare ...
 
Dans la plupart des cas, c'est bien mieux de fournir des Comparator à côté des objets (en tant que classe public static par exemple ...)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 14-11-2003 à 00:59:43    

ce que je ne comprends pas c que ca marche et que la methode equals nest pas appelée... j'ai mit un system.out dedans
 
 
sinon par ordre naturel tu veux dire que en prenant toutes les donnees membres de mon objet on pourrait le classer ??
 
voila ce que candidat contient  
 

Code :
  1. private int score=0;              // nombre de votes
  2.    private Vector v=new Vector();    // contient les noms des personne qui ont vote pour se candidat
  3.    private String name=new String(); // nom du candidat


 
 

Reply

Marsh Posté le 14-11-2003 à 01:03:14    

Ce que je dis c'est que la plupart des objets ne devraient pas implémenter Comparabale, parce que pour la plupart, la façon dont ils sont triables dépend de l'utilisation qu'on veut en faire.
 
Et tu fais comme tu veux pour le equals, mais t'étonne pas si un de ces quatres, t'as des problèmes en utilisant ton objet avec les classes java.utils ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 14-11-2003 à 01:09:12    

benou a écrit :

Ce que je dis c'est que la plupart des objets ne devraient pas implémenter Comparabale, parce que pour la plupart, la façon dont ils sont triables dépend de l'utilisation qu'on veut en faire.
 
Et tu fais comme tu veux pour le equals, mais t'étonne pas si un de ces quatres, t'as des problèmes en utilisant ton objet avec les classes java.utils ...  


 
ok merci jai compris maintenant

Reply

Marsh Posté le 14-11-2003 à 01:19:29    

benou a écrit :

Ce que je dis c'est que la plupart des objets ne devraient pas implémenter Comparabale, parce que pour la plupart, la façon dont ils sont triables dépend de l'utilisation qu'on veut en faire.
 
Et tu fais comme tu veux pour le equals, mais t'étonne pas si un de ces quatres, t'as des problèmes en utilisant ton objet avec les classes java.utils ...  

en l'occurence pour comparable il en a pas besoin vu qu'il delegue à compareTo de String
par contre, de fait, ça ne garantit pas l'ordre si deux Candidats on le meme nom ;)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 14-11-2003 à 01:24:20    

the real moins moins a écrit :

en l'occurence pour comparable il en a pas besoin vu qu'il delegue à compareTo de String
par contre, de fait, ça ne garantit pas l'ordre si deux Candidats on le meme nom ;)


hein ?
besoin pour quoi ???
 
et pkoi l'ordre marcherait ps avec des noms identiques ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 14-11-2003 à 01:32:11    

il marcherait mais serait pas garanti; pas tout le temps le meme quoi [:spamafote]
(de meme que l'ordre de deux Strings "pouet" et "pouet" peut varier. bon, nom vu le cas special de la classe String et du cache machin chouette mais bon :o)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 14-11-2003 à 01:32:11   

Reply

Marsh Posté le 14-11-2003 à 01:42:19    

the real moins moins a écrit :

il marcherait mais serait pas garanti; pas tout le temps le meme quoi [:spamafote]
(de meme que l'ordre de deux Strings "pouet" et "pouet" peut varier. bon, nom vu le cas special de la classe String et du cache machin chouette mais bon :o)


 
sinon a part la philosophie des 2 methodes leur utilisation est pratiquement identique c bizarre tout de meme

Reply

Marsh Posté le 14-11-2003 à 01:44:34    

ben, non. comme t'as dis benou, dans un cas (comparable), tu veux donner un ordre "naturel" à tes objets (ie, pas besoin de faire un sort explicite pour les triers, si tu utilises un SortedSet par exemple), dans l'autre tu peux avoir differents Comparator (un pour le nom du Candidat, l'autre pour son score), et les utiliser quand tu as besoin d'explicitement trier tes données pour un usage particulier


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed