HashMap : Ajout de valeurs avec les touches communes et l'impression de sortir
J'ai un fichier qui a Chaîne dans le formulaire key/value
paire comme les gens et les compter, exemple serait
"Reggy, 15"
"Jenny, 20"
"Reggy, 4"
"Jenny, 5"
et à la sortie j'aurais résume toutes les valeurs fondées sur la clé, donc pour notre exemple, la sortie serait
"Reggy, 19"
"Jenny, 25"
Voici ma démarche:
- Lire chaque ligne et pour chaque ligne de la clé et à compter à l'aide de scanner et d'avoir
,
comme délimiteur - Maintenant voir si la clé est déjà présent avant de s'puis il suffit d'ajouter currentValues à previousValues si pas alors prendre currentValue que la valeur de la table de hachage.
Exemple De Mise En Œuvre:
public static void main(final String[] argv) {
final File file = new File("C:\\Users\\rachel\\Desktop\\keyCount.txt");
try {
final Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
if (scanner.hasNext(".*,")) {
String key;
final String value;
key = scanner.next(".*,").trim();
if (!(scanner.hasNext())) {
//pick a better exception to throw
throw new Error("Missing value for key: " + key);
}
key = key.substring(0, key.length() - 1);
value = scanner.next();
System.out.println("key = " + key + " value = " + value);
}
}
} catch (final FileNotFoundException ex) {
ex.printStackTrace();
}
}
Part je ne suis pas clair de savoir comment diviser une paire clé/valeur lors de la lecture et de la création de table de hachage.
Est aussi l'approche suis suggestion une optimale ou est-il un moyen pour améliorer la performance plus.
avez-vous essayé
C'est "pseudo-code" 🙂 en.wikipedia.org/wiki/Pseudocode
java.util.HashMap#containsKey(),put(),get()
?C'est "pseudo-code" 🙂 en.wikipedia.org/wiki/Pseudocode
OriginalL'auteur Rachel | 2013-02-08
Vous devez vous connecter pour publier un commentaire.
Puisque ce n'est presque certainement un exercice d'apprentissage, je vais rester à l'écart de l'écriture de code, vous permettant d'avoir tout le plaisir.
Créer un
HashMap<String,Integer>
. Chaque fois que vous voyez une paire clé/valeur, vérifier si le hachage de la carte a une valeur pour la clé (utilisation " containsKey(clé)'). Si elle le fait, d'obtenir que les vieux de la valeur à l'aide deget(key)
, ajouter la nouvelle valeur, et de stocker le résultat de retour à l'aide deput(key, newValue)
. Si la clé n'y est pas encore, ajouter un nouveau un nouveau à l'aide d'put
. N'oubliez pas de faire unint
si leString value
(utiliserInteger.valueOf(value)
pour ça).Aussi loin que l'optimisation va, tout d'optimisation à ce stade, il serait prématuré: il n'a même pas de travail! Cependant, il est difficile d'obtenir beaucoup plus rapide que d'une seule boucle que vous avez, qui est également assez simple.
Ce doit être vraiment simple si vous utilisez
Scanner
de lire des lignes, et ensuite utilisersplit
Prendre un coup d'oeil à cet exemple sur ideone pour une démo.merci, je l'ai maintenant.
OriginalL'auteur dasblinkenlight
Essayez ceci:
ressembler à l'âge? Puis ces deux Reggie et Jenny ne sont pas la même personne 🙂 ce qui est une toute autre affaire. En outre
looks like
n'est pas un bon argument.C'est vrai, cependant, doivent être choisis judicieusement.
OriginalL'auteur ogzd
Façon la plus simple je pense, le fractionnement des valeurs:
Il n'est probablement pas le moyen le plus efficace en termes de performances, mais c'est assez simple.
Scanner
est généralement utilisé pour l'analyse, mais l'analyse ici n'a pas l'air complexe, est seulement une fraction de chaînes de caractères.OriginalL'auteur Sednus
Pour la lecture, personnellement, j'utiliserais:
Scanner.nextLine()
,String.split(",")
, etInteger.valueOf(value)
Doit être split (","), car il attend une Chaîne.
OriginalL'auteur Aurand
Genre de fin, mais propre solution avec le temps, la complexité de O(n). Cette solution contourne de tri de tableaux
OriginalL'auteur Ritesh Karwa
OriginalL'auteur Jhutan Debnath