Salut,
une Map (et dont HashMap est une implémentation particulière) est une classe qui permet d'associer des clefs avec des valeurs indéxées sur ces clefs.
Ce que dit @thelvin c'est d'utiliser en clef les mots et de leur associer un compteur de fichier, ce qui te permettra ensuite de connaitre le nombre de fichiers qui stockent chaque mot, et donc de connaitre ceux qui sont stockés dans le plus grand nombre de fichier (ou toutes autres conditions que tu entends par "majorité de fichier").
Tu vas donc utiliser une map dont les clefs sont des mots (donc des String) et les valeurs de compteurs, donc des Integer (qui devrait être suffisant pour stocker un nombre de fichiers conséquents)
Pour créer ta map :
Map<String, Integer> map = new HashMap<String, Integer>();
Ensuite, en gros tu vas avoir :
Chaque fois que tu lis un mot dans un fichier, tu fais quelque chose comme ça (en supposant qu'un mot se trouve qu'une seule fois dans chaque fichier) :
1 2 3 4 5
| if ( map.contains(mot) ) { // si la map indexe déjà le mot
map.put(mot, map.get(mot) + 1); // incrémenter le compteur associé
} else { // le mot n'a jamais été encore compté puisqu'il n'est pas encore dans la map
map.put(mot, 1); // ajouter le mot dans la map et le compter 1 fois
} |
Ensuite, tu peux lire les valeurs dans ta map pour déterminer par exemple ceux qu'on retrouve le plus grand nombre de fois par exemple :
1 2 3 4 5
| int max=0;
for(Integer valeur : map.values()) { // on parcourt tous les compteurs
if( valeur>max ) max = valeur; // si la valeur est supérieur au max courant, c'est qu'elle est forcément plus possiblement le max;
}
// maintenant dans max on a forcément la plus grande des valeurs, c'est à dire le plus grand nombre de fichiers qui contient un même mot |
Puis chercher dans ta map les mots dont le compteur associé est égal au max trouvé :
1 2 3 4 5 6 7 8 9 10
| for(Map.Entry<String, Integer> entry : map.entrySet()) { // on parcourt toutes les entrées (comprends associations clef-valeur)
if ( entry.getValue()==max ) { // si cette entrée est égale au max
String mot = entry.getKey(); // on lit le mot correspondant au compteur qui est égal au max
// le mot contenu dans la variable mot est un mot contenu dans un nombre de fichier qui correspond au plus grand nombre de fichier qui stocke un même mot
// et là tu fais ce que tu veux avec ce mot
// tu le stocke dans une liste, tu l'affiches, tu l'écris dans fichier, que sais-je ...
}
} |
Partager