Trier selon valeur HashMap

Trier selon valeur HashMap - Java - Programmation

Marsh Posté le 21-05-2006 à 16:51:10    

Bonjour,
 
je compte les occurances de chaque lettres dans un fichiers, je stocke cela dans une hashmap. La clé tant la lettre et la valeur son nombres d'occurences. J'aimerai ensuite trier ma hashmap selon un ordre croissant des valeurs. Je sais que l'on ne peut trier une hashmap j'essaye donc de passer par une Treemap mais a priori on ne peut trier que pour les clé...
 
Comment puis je faire ?
Faut il utiliser un autre type de map ?
 

Code :
  1. private HashMap<String,Integer> tableFrequence;
  2. private TreeMap<String,Integer> frequenceTrie;
  3. FreequenceTrie = new TreeMap<String,Integer>(tableFrequence);


 
Merci :jap:

Reply

Marsh Posté le 21-05-2006 à 16:51:10   

Reply

Marsh Posté le 22-05-2006 à 11:29:14    

tu peux éventuellement essayer Collections.sort en implémentant un comparateur pour HashMap

Reply

Marsh Posté le 22-05-2006 à 11:59:33    

En effet, tu ne peux à priori trier que les clés (en utilisant un Comparator) donc il va falloir que tu "bidouilles" ta TreeMap...

Reply

Marsh Posté le 22-05-2006 à 12:13:25    

au lieu d'une Map, tu pourrais pas avoir une List d'objets d'une autre classe que tu definis dont chaque instance correspond a un compte d'occurence, genre un char et un int, et apres tu tries simplement ta liste avec un Comparator qui va bien ?

Reply

Marsh Posté le 22-05-2006 à 13:13:01    

souk a écrit :

au lieu d'une Map, tu pourrais pas avoir une List d'objets d'une autre classe que tu definis dont chaque instance correspond a un compte d'occurence, genre un char et un int, et apres tu tries simplement ta liste avec un Comparator qui va bien ?


 
Si mais je voulais utiliser une map parce que c'est rapide. Je ne sais pas si ca change vraiment quelque chose avec un fichier texte de 100ko mais bon...  
Mais bon vu la galere que c'est je vais changer... C'est fou qu'il n'y ai pas une container avec la possibilité de mettre une clké/Valeur et de la trier selon la valeur ! :o
 
Merci tlm :jap:

Reply

Marsh Posté le 22-05-2006 à 13:50:34    

J'ai fais ce que souk a dit, en fait je garde ma hashmap pour gagner du temps quand je compte et ensuite je recopie les infos dans un ArrayList de caractere qui ont comme attribut la val du caractere et son nombre d'occurence.
Mais pour trier c'est chaud...
 

Code :
  1. private List<Caractere> frequenceTrie;
  2. frequenceTrie = new ArrayList<Caractere>();
  3. //Je remplis mon tableau
  4. Arrays.sort(frequenceTrie);
  5. //Erreur : The method sort(long[]) in the type Arrays is not applicable for the arguments (List<Caractere> )


 
Ma méthode compareTo dans ma classe Caractere (qui implemente Comparable)

Code :
  1. public int compareTo(Object o){
  2.  if(!(o instanceof Caractere))
  3.   throw new ClassCastException();
  4.  Caractere c = (Caractere)o;
  5.  if(this.nbOccurence < c.getNbOccurence())
  6.   return -1;
  7.  else if(this.nbOccurence == c.getNbOccurence())
  8.   return 0;
  9.   else return 1;
  10. }


 
Une idée de cette erreur ?
Arrays.sort(frequenceTrie);
//Erreur : The method sort(long[]) in the type Arrays is not applicable for the arguments (List<Caractere> )
 
C'est pareil si je fais :
Collection.sort(frequenceTrie);
//Erreur : The method sort(List<Caractere> ) is undefined for the type Collection
 
Edit :  
J'ai trouvé en faisant ca :
Arrays.sort(frequenceTrie.toArray());
Mais ca ne trie rien du tout :D
Vais le faire a la main le tri je sens !


Message édité par Loizo le 22-05-2006 à 14:03:12
Reply

Marsh Posté le 22-05-2006 à 14:44:44    

Reply

Marsh Posté le 22-05-2006 à 16:59:02    

Citation :

C'est pareil si je fais :
Collection.sort(frequenceTrie);


 
Essaye Collections.sort(frequenceTrie);

Message cité 1 fois
Message édité par Bidem le 22-05-2006 à 16:59:30
Reply

Marsh Posté le 22-05-2006 à 17:34:30    

Bidem a écrit :

Citation :

C'est pareil si je fais :
Collection.sort(frequenceTrie);


 
Essaye Collections.sort(frequenceTrie);


 
Ca marche génial !
Tain un s a la con :D
 
J'ai juste ca :
Type safety: Unchecked invocation sort(List<Caractere> ) of the generic method sort(List<T> ) of type Collections
 
Merci :jap:

Reply

Marsh Posté le 22-05-2006 à 17:49:17    


trouvé en cherchant un peu dans google :p
 
tu dois avoir ça :

Code :
  1. public class Caractere implements Comparable {
  2. ...
  3. }


 
et il faut mettre ça :
 

Code :
  1. public class Caractere implements Comparable<Caractere> {
  2. ...
  3. // la méthode compareTo sera à modifier aussi
  4. }

Reply

Marsh Posté le 22-05-2006 à 17:49:17   

Reply

Marsh Posté le 22-05-2006 à 17:51:11    

Bidem a écrit :

trouvé en cherchant un peu dans google :p
 
tu dois avoir ça :

Code :
  1. public class Caractere implements Comparable {
  2. ...
  3. }


 
et il faut mettre ça :
 

Code :
  1. public class Caractere implements Comparable<Caractere> {
  2. ...
  3. // la méthode compareTo sera à modifier aussi
  4. }



 
Nickel ca enleve mon warning, thx :jap:

Reply

Marsh Posté le 23-05-2006 à 10:08:04    

Je crois que j'ai trouvé ton bonheur par le plus grand des hasards : http://www.kickjava.com/753.htm : Sort a TreeMap by its values not its keys

Reply

Marsh Posté le 23-05-2006 à 16:54:05    

Ledid a écrit :

Je crois que j'ai trouvé ton bonheur par le plus grand des hasards : http://www.kickjava.com/753.htm : Sort a TreeMap by its values not its keys


 
Je vais regarder ca, merci :jap:

Reply

Sujets relatifs:

Leave a Replay

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