Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2010 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Comparateur avecTreeSet Java

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comparateur avecTreeSet Java

n°2236770
ahmadou_20
Posté le 01-09-2014 à 16:24:51  profilanswer
 

Bonjour,
 
J ai cree une classe Test pour laquelle j ai defini un comparatuer :
 

Code :
  1. public class Test implements Comparable<Test > {
  2.  
  3.   private Float         number;
  4.  
  5.   private Integer       weight;
  6.    
  7.   private String        category;
  8.  
  9.   public Test() {
  10.  
  11.   }
  12. public Test(float number, int weight, float ratio, String category) {
  13.  
  14.     this.number= number;
  15.     this.weight = weight;
  16.     this.category = category;
  17.    
  18.   }
  19. public String toString() {
  20.  
  21.     String result = "";
  22.    
  23.     result = result.concat(" -- Number-->> " + number)
  24.                    .concat(" -- Weight -->> " + weight)
  25.                    .concat(" -- Category -->> " + category);
  26.    
  27.     return result;
  28.   }
  29. public int compareTo(test compareTest) {
  30.  
  31.     if(this.number!= compareTest.number) {
  32.       return this.number.compareTo(compareTest.number);
  33.     }
  34.     else if(this.weight!= compareTest.weight) {
  35.       return this.weight.compareTo(compareTest.weight);
  36.     }
  37.     else if(this.category != compareTest.category) {
  38.       return this.category.compareTo(compareTest.category);
  39.     }
  40.     else {
  41.       return 0;
  42.     }
  43.   }
  44.  
  45.   public static Comparator<Test> comparator = new Comparator<Test>() {
  46.                                                            
  47.                                                             public int compare(Test test1,
  48.                                                                                Test test2) {
  49.                                                            
  50.                                                               return test1.compareTo(test2);
  51.                                                             }
  52.                                                            
  53.                                                           };
  54.  
  55. }


 
 
En gros, j aimerais stocker dans un TreeSet differents objets Test tries par ordre ascendant suivant number, weight (si number est le meme pour deux objets) ou category (si number et weight sont les memes pour deux objets).
 
Le probleme c est que etant donne ce code,  
 

Code :
  1. TreeSet<Test> tree= new TreeSet<Test>(Test.comparator);
  2.    
  3.     Test t1 = new Test(2f, 12,"1" );
  4.     Test t2 = new Test(3f, 11, "2" );
  5.     Test t3= new Test(4f, 10, "3" );
  6.     tree.add(t1);
  7.     tree.add(t2);
  8.     tree.add(t3);
  9. for(Test test : tree) {
  10.       System.out.println(test.toString());
  11.     }


 
je m attendrais a tree contenant [t1, t2, t3] alors que je n obtiens dans tree que t1.
Je comprends pas pourquoi bien que les trois objets sont tous differents et donc ne s excluent pas dans le TreeSet.
 
 
Qu en pensez vous ?
 
Merci de votre aide ?


Message édité par ahmadou_20 le 01-09-2014 à 17:33:59
mood
Publicité
Posté le 01-09-2014 à 16:24:51  profilanswer
 

n°2236772
lasnoufle
La seule et unique!
Posté le 01-09-2014 à 16:48:51  profilanswer
 

Je suis p'tetre un peu con mais pourquoi le comparateur de ton TreeSet c'est celui de CancellationOption et pas celui de Test?
Peux-tu filer la definition du comparateur de CancellationOption?
Pourquoi definir un comparateur pour Test si c'est pour ne pas s'en servir?
 
Enfin bref, en copiant/collant ton code tel quel dans Eclipse, changeant le comparateur du TreeSet pour utiliser celui de Test, et corrigeant les appels aux constructeur qui sont invalides (3 parametres passes pour 4 demandes), ca marche nickel.


---------------
C'était vraiment très intéressant.
n°2236775
ahmadou_20
Posté le 01-09-2014 à 17:28:40  profilanswer
 

Oui desole il n ya pas de Cancellation option.
 
Il y que Test.
 
J ai corrige le code ci dessus.
 
mais le probleme subsiste.
 
desole pour le malentendu !!!!

n°2236781
lasnoufle
La seule et unique!
Posté le 01-09-2014 à 18:47:28  profilanswer
 

Ben heu "le probleme subsiste", il faut que tu sois plus precis. Comme dit plus haut, ton code marche tel quel sous Eclipse:

public class Test implements Comparable<Test > {
 
  private Float         number;
 
  private Integer       weight;
   
  private String        category;
 
   
public Test(float number, int weight, String category) {
 
    this.number= number;
    this.weight = weight;
    this.category = category;
   
  }
public int compareTo(Test compareTest) {
 
    if(this.number!= compareTest.number) {
      return this.number.compareTo(compareTest.number);
    }
    else if(this.weight!= compareTest.weight) {
      return this.weight.compareTo(compareTest.weight);
    }
    else if(this.category != compareTest.category) {
      return this.category.compareTo(compareTest.category);
    }
    else {
      return 0;
    }
  }
 
  public static Comparator<Test> comparator = new Comparator<Test>() {
                                                           
                                                            public int compare(Test test1,
                                                              Test test2) {
                                                           
                                                              return test1.compareTo(test2);
                                                            }
                                                           
                                                          };
                                                         
                                                         
  public static void main(String[] args) {
     TreeSet<Test> tree= new TreeSet<Test>(Test.comparator);
       
     Test t1 = new Test(2f, 12,"1" );
     Test t2 = new Test(3f, 11, "2" );
     Test t3= new Test(4f, 10, "3" );
        tree.add(t1);
        tree.add(t2);
        tree.add(t3);
       
        System.out.println(tree.size());
  }
 
}


Le System.out.println m'affiche bien 3, et si je debugge dessus, je vois bien le TreeSet en memoire avec 3 elements tries (3f sur la racine, 2f a gauche de la racine, 4f a droite de la racine).

 

Edit: et si tu affiches le contenu de l'arbre:

public static void main(String[] args) {
     TreeSet<Test> tree= new TreeSet<Test>(Test.comparator);
       
     Test t1 = new Test(2f, 12,"1" );
     Test t2 = new Test(3f, 11, "2" );
     Test t3= new Test(4f, 10, "3" );
        tree.add(t1);
        tree.add(t2);
        tree.add(t3);
       
        for (Iterator<Test> it = tree.iterator(); it.hasNext();) {
         Test t = it.next();
         System.out.println(t.number);
        }
  }


2.0
3.0
4.0


Message édité par lasnoufle le 01-09-2014 à 18:52:16

---------------
C'était vraiment très intéressant.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Comparateur avecTreeSet Java

 

Sujets relatifs
Un algo récursif en java ?mixer java avec javascript pour gerer les evenement sur un iframe
FileDialog Java (remote desktop) not refreshingavoir 2 processus java distincts pour 2 programmes ?
collection javacompte bancaire sous java
Créer un logiciel JAVA/FLASH + mise en ligne ?Prendre une photo à partir de la webcam en JAVA
LinkedList javaInterface graphique application JAVA
Plus de sujets relatifs à : Comparateur avecTreeSet Java


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR