2014-09-09 1 views
0

Utilisation d'expressions dans le débogueur NetBeans J'ai pensé qu'une valeur devrait certainement être retournée par un HashMap (backoffMap), mais je n'ai que la valeur null. La clé dans le HashMap n'a pas de valeur nulle selon NetBeans. Les captures d'écran montrent la folie que je vois. Que se passe-t-il?Méthode get() Java HashMap ne renvoyant pas l'élément

enter image description here

enter image description here

Il convient de noter que cela est en cours d'exécution au niveau de l'API Android 16. Je ne suis pas sûr, mais le comportement des Dalvik et les bibliothèques Java Android peut être différent, et être à l'origine ce problème.

+5

Qu'en est-il de 'backoffMap.keySet(). ToArray() [82] .equals (b)'? Pouvez-vous produire un programme court mais complet démontrant cela? (Cela rendrait beaucoup plus facile de vous aider.) –

+1

Vous avez probablement modifié la clé après qu'elle ait été placée dans la HashMap. Comme il n'a pas le même hashCode que lorsqu'il était placé dans la carte, il est toujours dans le jeu de clés, mais get() ne le trouve pas dans le compartiment où il devrait être en fonction de son nouveau hashCode. –

+0

La capture d'écran montre que les hashcodes sont les mêmes, sauf si je suis aveugle. La classe clé est une classe personnalisée de type PeerAddress, implémentant ses propres equals() et hashCode(). @JonSkeet: Je vais faire l'inverse égal à() quand je peux reproduire les conditions une fois de plus (pas facile), car mon programme vient de quitter/déconnecter soudainement. Merci. –

Répondre

2

Avez-vous modifié l'objet après son insertion dans HashMap? Si c'est le cas, le code de hachage sur l'objet que vous recherchez sera différent de ce qu'il était lorsqu'il a été inséré dans la carte. Cela vous empêchera de trouver l'objet sur la carte.

+0

Je vais voir si je peux vérifier cela maintenant, merci ... –

+0

Vous avez absolument raison. Vous et JB Nizet obtenez le crédit pour cette réponse évidente à laquelle je n'ai même pas pensé. –

Questions connexes