À l'aide de table de hachage pour compter les instances
J'ai le code suivant pour compter les occurrences des différentes chaînes dans un tableau;
String words[] = {"the","cat","in","the","hat"};
HashMap<String,Integer> wordCounts = new HashMap<String,Integer>(50,10);
for(String w : words) {
Integer i = wordCounts.get(w);
if(i == null) wordCounts.put(w, 1);
else wordCounts.put(w, i + 1);
}
Est-ce une bonne façon de le faire? Il semble un peu longue haleine pour une tâche simple. Le HashMap
résultat est utile pour moi parce que je vais être l'indexation par la chaîne.
Je suis inquiète de voir que la ligne
else wordCounts.put(w, i + 1);
pourrait être l'insertion d'un deuxième key-value
paire en raison du fait que
new Integer(i).equals(new Integer(i + 1));
serait faux, de sorte que deux Integers
finiront sous le même String
clé seau, droit? Ou ai-je un peu plus pensé moi-même dans un coin?
- Semble bien pour moi; c'est pourquoi je le ferais. L'essayer 😉
- J'étais sur le point de, mais la pensée de la totalité de mon approche peut être pauvre, alors j'ai pensé que je jetterais sur ici.
- Bon code doit utiliser
Map<K, V>
Interface.
Vous devez vous connecter pour publier un commentaire.
Oui, vous le faites de manière correcte. HashMap remplace les valeurs si la même clé est fournie.
De Java doc de
HashMap#mettre
Collections
toute la semaine. bien sûrvalues.equals()
est pas pertinent, son tout sur les touches!Votre code travail - mais il serait plus simple d'utiliser
HashMultiset
de Goyave.Votre code est parfaitement bien. Vous carte de chaînes en nombres entiers. Rien n'est dupliqué.
HashMap ne permettent pas de double clés, il n'existe aucun moyen d'avoir plus d'un MÊME paires clé-valeur dans votre carte.
Ici est une Chaîne, compteur spécifique qui devrait être généricisés et avoir un tri par valeur de l'option pour toString(), mais est orientée objet wrapper le problème, car je ne peux pas trouver quelque chose de semblable:
Votre code semble bien pour moi et il n'y a pas de problème avec elle. Grâce à Java 8 fonctionnalités, il peut être simplifiée:
la follwowing code
vouloir imprimer.