java collections - keyset() vs entrySet() dans la carte

J'ai mis une chaîne d'éléments de tableau est une carte où les éléments de tableau de chaînes est la clé et la fréquence de la parole est la valeur, par exemple:

String[] args = {"if","it","is","to","be","it","is","up","me","to","delegate"};

puis la carte des entrées comme [ if:1, it:2 .... ]

Set<String> keys = m.keySet();
System.out.println("keyset of the map : "+keys);

imprime toutes les touches: "if","it","is","to","be","it","is","up","me","to","delegate"

Set<Map.Entry<String, Integer>> entrySet = m.entrySet();
Iterator<Map.Entry<String, Integer>> i = entrySet.iterator();
while(i.hasNext()){
    Map.Entry<String, Integer> element = i.next();
    System.out.println("Key: "+element.getKey()+" ,value: "+element.getValue());
}

imprime toutes les principales paires de valeurs :

À l'aide d'entrée de jeu tirages de toutes les valeurs:

Key: if ,value: 1
Key: it ,value: 2
Key: is ,value: 2
Key: to ,value: 2
Key: be ,value: 1
Key: up ,value: 1
Key: me ,value: 1
Key: delegate ,value: 1

Mais le bloc de code ci-dessous doit imprimer exactement le même résultat que ci-dessus, mais il ne le fait pas:

Iterator<String> itr2 = keys.iterator();
while(itr2.hasNext()){
    //System.out.println(itr1.next()+" ");
    //System.out.println(m.get(itr1.next())+" ");
    System.out.println("Key: "+itr2.next()+" ,value: "+m.get(itr2.next()));
}

Il imprime:

Key: if ,value: 2
Key: is ,value: 2
Key: be ,value: 1
Key: me ,value: 1

Mais si nous décommentez la ligne 1 dans la boucle while, j'.e

System.out.println(itr1.next()+" ");

et commentaire de la ligne

System.out.println("Key: "+itr2.next()+" ,value: "+m.get(itr2.next()));

Puis, nous avons toutes les clés: {"if","it","is","to","be","it","is","up","me","to","delegate"};

Si nous utilisons m.get() avec itr2.next(), puis l'itérateur n'a pas quelques touches!

  • Si vous stockez beaucoup de valeurs de type entier, vous devriez regarder dans le fastutil de la bibliothèque à la place de j.u des collections.
  • Le clavier n'aura pas de répétitions, je suppose qu'il ne devrait pas avoir le "il" string imprimé deux fois. Qui vous l'impression après cette appel<String> keys = m.keySet(); System.out.println("le jeu de clés de la carte : "+clés);
InformationsquelleAutor NINCOMPOOP | 2012-01-22