2010-02-16 10 views
9

Sto cercando di loop su un HashMap con il metodo keySet() come di seguito:campo keySet in HashMap è nullo

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

io uso un sacco di for-each loop sul HashMaps in altre parti del mio codice, ma questo come un comportamento strano: le sue dimensioni sono 7 (ciò che è normale), ma keySet, entrySet e values sono null (secondo il debugger Eclipse)!

La variabile "pacco" viene istanziato e popolato come segue (nulla di originale ...):

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

Se stai facendo un sacco di for-each loop sul HashMaps Penso che si potrebbe desiderare cambiare la vostra struttura. – Macarse

+0

Sono d'accordo con @Macarse. Inoltre: * se * si desidera eseguire il looping su una 'Map' e sono necessarie sia le chiavi che i valori, in genere è molto meglio eseguire il looping di' entrySet() 'per evitare ricerche non necessarie per ogni chiave. –

+0

Grazie per il tuo suggerimento Joachim, lo farò. @Macarse: ho inserito valori nelle coppie di valori-chiave delle mie mappe estratti da file (foglio di calcolo Excel) per applicare un insieme di regole sintattiche (controlli regExp) prima di creare un nuovo foglio di calcolo. Pensi che le mappe non siano un buon oggetto per archiviare questo? –

risposta

18

Che cosa si intende per keySet, entrySet e values? Se intendi i campi interni di HashMap, non dovresti guardarli e non devi preoccuparti di loro. Sono usati per il caching.

Per esempio nel Java 6 VM che uso keySet() è implementato in questo modo:

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

Quindi il fatto che keySet è null è irrilevante. keySet() (il metodo) non restituirà mai null.

Lo stesso vale per entrySet() e values().

+1

Sembra che il debugger di Eclipse visualizzi le informazioni desiderate nel campo "tabella". . – Personman

+0

Si sta tornando nulla per me in Java 7 utilizzando data.keySet() toArray(); dove i dati sono HashMap e non è nullo – tricknology

+0

@tricknology: se questo è il caso, suggerisco di postarlo come una nuova domanda (idealmente con un [SSCCE] (http://sscce.org /)). –