keySet-Feld in HashMap null ist
Ich versuche eine Schleife über eine HashMap
mit der keySet()
Methode wie folgt:
for (String key : bundle.keySet()) {
String value = bundle.get(key);
...
}
Ich benutze eine Menge for-each-Schleifen auf HashMaps in andere Teile von meinem code, aber so ein komisches Verhalten: seine Größe ist 7 (was ist normal) aber keySet
, entrySet
und values
sind null
(entsprechend den Eclipse-debugger)!
Den "bundle" - variable instanziiert wird und wie folgt gefüllt (nichts original...):
Map <String, String> privVar;
Constructor(){
privVar = new HashMap<String, String>();
}
public void add(String key, String value) {
this.privVar.put(key, value);
}
- Wenn Sie tun eine Menge der for-each-Schleifen auf HashMaps ich denke, möchten Sie vielleicht ändern Sie Ihre Struktur.
- Ich Stimme mit @Macarse. Auch: wenn Sie wollen, um eine Schleife über einen
Map
und müssen beide, der Schlüssel und Werte, es ist in der Regel viel besser, um eine Schleife über dieentrySet()
zur Vermeidung unnötiger Suchvorgänge für jede Taste. - Vielen Dank für Ihren Vorschlag Joachim, werde ich das tun. @Macarse: ich habe die Werte in "meine Karten" Schlüssel-Wert-Paare extrahiert aus den Dateien (Excel-Tabelle) verwenden, um eine Reihe von syntaktischen Regeln (regExp überprüft) vor dem erstellen einer neuen Kalkulationstabelle. Denken Sie Karten sind nicht ein gutes Objekt zu speichern ?
- Also du machst eine Map<String, String> wo ist der Schlüssel eine Zeile und den Wert der regex?
- Nein, Nein. Der Schlüssel ist ein Schlüssel, und der Wert ist eine übersetzung. Es ist durchaus ein äquivalent zu einem "ResourceBundle " Eigenschaften" - Datei. Und so die map ist ein äquivalent für das ResourceBundle. Das ist, was inspiriert mich eigentlich 🙂
- und warum sind Sie es Durchlaufen?
- Ich bin der Iteration über Einträge anwenden .matches(regexp), und ändern Sie die übersetzung, wenn es fehlschlägt, nach definierten catcher/Ersatz von regulären Ausdrücken.
- SOrry, ich verstehe immer noch nicht, wenn Sie wollen, erstellen Sie bitte eine weitere Frage, die erklären, was Sie tun.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was meinst du mit
keySet
,entrySet
undvalues
? Wenn Sie meinen, die internen Felder derHashMap
, dann sollten Sie nicht auf Sie schauen und müssen nicht Sorge über Sie. Sie sind für die Zwischenspeicherung verwendet.Beispielsweise in der Java-6-VM, die ich verwenden
keySet()
umgesetzt wird, wie diese:Also die Tatsache, dass
keySet
istnull
ist irrelevant.keySet()
(die Methode) wird nie wiedernull
.Das gleiche gilt für
entrySet()
undvalues()
.