jeu de clés de champ dans la table de hachage est null
Je suis en train de boucler sur un HashMap
avec le keySet()
méthode que ci-dessous:
for (String key : bundle.keySet()) {
String value = bundle.get(key);
...
}
J'utilise beaucoup de boucles for-each sur HashMaps dans d'autres parties de mon code, mais celui-ci comme un comportement bizarre: sa taille est de 7 (ce qui est normal) mais keySet
, entrySet
et values
sont null
(selon le débogueur Eclipse)!
Le "bundle" variable est instanciée et peuplée comme suit (rien de très original...):
Map <String, String> privVar;
Constructor(){
privVar = new HashMap<String, String>();
}
public void add(String key, String value) {
this.privVar.put(key, value);
}
Si vous faites beaucoup de boucles for-each sur HashMaps je pense que vous pourriez voulez changer votre structure.
Je suis d'accord avec @Macarse. Aussi: si vous souhaitez faire une boucle sur un
Merci pour votre suggestion Joachim, je vais le faire. @Macarse: j'ai mis des valeurs dans mes cartes de clé-valeur couples extraits de fichiers (tableur Excel) pour appliquer un ensemble de règles syntaxiques (regExp contrôles) avant de créer une nouvelle feuille de calcul. Pensez vous que les cartes ne sont pas un bon objet pour stocker ?
Si vous faites une Map<String, String> où est la clé d'une ligne et la valeur est la regex?
Non, non. La clé est une clé, et la valeur est une traduction. Il est tout à fait équivalente à une "ResourceBundle" propriétés de fichier. Et si la carte est un équivalent du ResourceBundle. C'est ce que m'a inspiré en fait 🙂
Je suis d'accord avec @Macarse. Aussi: si vous souhaitez faire une boucle sur un
Map
et de la nécessité à la fois les clés et les valeurs, il est généralement beaucoup mieux faire une boucle sur le entrySet()
afin d'éviter d'inutiles recherches pour chaque clé.Merci pour votre suggestion Joachim, je vais le faire. @Macarse: j'ai mis des valeurs dans mes cartes de clé-valeur couples extraits de fichiers (tableur Excel) pour appliquer un ensemble de règles syntaxiques (regExp contrôles) avant de créer une nouvelle feuille de calcul. Pensez vous que les cartes ne sont pas un bon objet pour stocker ?
Si vous faites une Map<String, String> où est la clé d'une ligne et la valeur est la regex?
Non, non. La clé est une clé, et la valeur est une traduction. Il est tout à fait équivalente à une "ResourceBundle" propriétés de fichier. Et si la carte est un équivalent du ResourceBundle. C'est ce que m'a inspiré en fait 🙂
OriginalL'auteur Mathieu L | 2010-02-16
Vous devez vous connecter pour publier un commentaire.
Qu'entendez-vous par
keySet
,entrySet
etvalues
? Si vous voulez dire que les champs internes deHashMap
, alors vous ne devriez pas regarder et ne se préoccupe pas d'eux. Ils sont utilisés pour la mise en cache.Par exemple dans la version 6 de Java VM que j'utilise
keySet()
est mis en œuvre comme ceci:Donc le fait que
keySet
estnull
n'est pas pertinent.keySet()
(la méthode) ne retournera jamaisnull
.La même chose est vraie pour
entrySet()
etvalues()
.Elle retourne null pour moi dans Java 7 à l'aide de données.keySet().toArray(); où les données sont une HashMap<String,String>, et il n'est pas null
si c'est le cas, je vous suggère de poster une nouvelle question (idéalement avec un SSCCE).
OriginalL'auteur Joachim Sauer