Ik heb een HashMap
:
private HashMap<TypeKey, TypeValue> example = new HashMap<TypeKey, TypeValue>();
Nu wil ik alle waarden doorlopen en ze afdrukken.
Ik heb dit geschreven:
for (TypeValue name : this.example.keySet()) {
System.out.println(name);
}
Het lijkt niet te werken.
Wat is het probleem?
EDIT: Nog een vraag: Is deze collectie op nul gebaseerd? Ik bedoel als het 1 sleutel en waarde heeft zal de grootte 0 of 1 zijn?
keySet() retourneert alleen een set sleutels van je hashmap, je zou deze sleutelset moeten itereren en de waarde uit de hashmap moeten halen met deze sleutels.
In je voorbeeld is het type van de hashmap's sleutel TypeKey
, maar je specificeerde TypeValue
in je generieke for-lus, dus het kan niet worden gecompileerd. U moet het veranderen in :
for (TypeKey name: example.keySet()){
String key = name.toString();
String value = example.get(name).toString();
System.out.println(key + " " + value);
}
Update voor Java8:
example.entrySet().forEach(entry->{
System.out.println(entry.getKey() + " " + entry.getValue());
});
Als je de sleutelwaarde niet hoeft af te drukken en alleen de hashmapwaarde nodig hebt, kun je de suggesties van anderen gebruiken.
Nog een vraag: Is deze collectie is nul basis? Ik bedoel als het heeft 1 sleutel en waarde zal de grootte 0 of 1 zijn?
De collectie geretourneerd door keySet()
is een Set.Je kunt de waarde niet uit een Set halen met behulp van een index, dus het is niet de vraag of het zero-based of one-based is. Als je hashmap één sleutel heeft, zal de geretourneerde `keySet()' één entry bevatten, en zijn grootte zal 1 zijn.
Je hebt verschillende opties
map.values()
](http://download.oracle.com/javase/6/docs/api/java/util/Map.html#values()) , die krijgt de waarden, niet de sleutelsmap.entrySet()
](http://download.oracle.com/javase/6/docs/api/java/util/Map.html#entrySet()) die beide heeftkeySet()
](http://download.oracle.com/javase/6/docs/api/java/util/Map.html#keySet()) en roep voor elke sleutel map.get(key)
Je wilt de waarde set, niet de sleutel set:
for (TypeValue name: this.example.values()) {
System.out.println(name);
}
De code die je geeft zou'niet eens compileren, wat misschien de moeite waard is om te vermelden in toekomstige vragen - "lijkt'niet te werken" is een beetje vaag!