2010-02-16 13 views
9

Ich versuche, über ein HashMap mit der keySet() Methode Schleife wie folgt:keySet Feld in HashMap null ist

for (String key : bundle.keySet()) { 
    String value = bundle.get(key); 
    ... 
} 

Ich benutze eine Menge von für-jeden-Schleife auf HashMaps in anderen Teilen meines Codes, aber dieses als ein seltsames Verhalten: seine Größe ist 7 (was ist normal) aber keySet, entrySet und values sind null (nach dem Eclipse-Debugger)!

Das "Bündel" Variable instanziiert und bevölkert wie folgt (nichts original ...):

Map <String, String> privVar; 
Constructor(){ 
    privVar = new HashMap<String, String>(); 
} 
public void add(String key, String value) { 
    this.privVar.put(key, value); 
} 
+2

Wenn Sie viele for-each Loops auf HashMaps machen, denke ich, dass Sie vielleicht Ihre Struktur ändern möchten. – Macarse

+0

Ich stimme @Macarse zu. Außerdem: * Wenn * Sie eine "Map" durchlaufen möchten und sowohl die Schlüssel als auch die Werte benötigen, ist es normalerweise viel besser, das 'entrySet()' zu durchlaufen, um unnötige Suchen für jede Taste zu vermeiden. –

+0

Danke für deinen Vorschlag Joachim, ich werde das tun. @Macarse: Ich lege Werte in meine Maps ein, die aus Dateien extrahiert wurden (Excel-Tabelle), um eine Reihe von syntaktischen Regeln anzuwenden (regExp-Checks), bevor eine neue Tabelle erstellt wird. Denkst du, Karten sind kein gutes Objekt, um dies zu speichern? –

Antwort

18

Was meinst du mit keySet, entrySet und values? Wenn Sie die internen Felder von HashMap meinen, dann sollten Sie sie nicht ansehen und brauchen sich nicht darum zu kümmern. Sie werden zum Caching verwendet.

Zum Beispiel in der Java 6 VM, die ich verwende keySet() wie dies umgesetzt wird:

public Set<K> keySet() { 
    Set<K> ks = keySet; 
    return (ks != null ? ks : (keySet = new KeySet())); 
} 

Die Tatsache, dass keySet ist null irrelevant ist. keySet() (die Methode) wird nie null zurückgeben. Das gleiche gilt für entrySet() und values().

+1

Es sieht so aus, als ob der Eclipse-Debugger die gewünschten Informationen im Feld 'Tabelle' anzeigt. – Personman

+0

Es gibt null zurück für mich in Java 7 mit data.keySet(). ToArray(); wo Daten ist eine HashMap und es ist nicht null – tricknology

+0

@tricknology: wenn das der Fall ist, schlage ich vor, Sie es als eine neue Frage (idealerweise mit einem [SSCCE] (http://sscce.org /)). –