je le TreeMap suivant:TreeMap cesse de façon aléatoire retourner correctement les valeurs
TreeMap<String, Integer> distances = new TreeMap<String, Integer>();
et il contient les deux chaînes, "Face" et "Foo", avec des valeurs appropriées, telles que:
System.out.println(distances);
rendement:
{Face=12, Foo=2}
Cependant, distances.get(Face)
retours null
, bien que distances.get(Foo)
renvoie correctement 2. Auparavant, distances.get(Face)
travaillé, mais pour une raison quelconque, il a cessé de fonctionner. Remarque: J'imprime la carte à droite avant d'appeler get() pour les deux clés, donc je n'ai pas accidentellement changé la valeur de Face à null. Est-ce que quelqu'un d'autre a déjà rencontré ce problème? Y a-t'il quelque chose que je puisse faire? J'ai du mal à essayer de comprendre comment résoudre ce problème.
REMARQUE: Dans le code réel, je n'utilise pas réellement les chaînes, mais un objet différent, donc c'est: TreeMap<Object, Integer>
. Il ne s'agit donc pas simplement d'une confusion entre les noms de variables et les chaînes littérales.
DEUXIÈME NOTE: Je me sens également assez confiant quant à mes implémentations de hashcode()
et equals()
pour l'objet que j'utilise. (De plus, si mes implémentations n'étaient pas correctes, cela ne fonctionnerait-il pas au début?)
Avez-vous un accès synchronisé à la carte? Peut-être que les valeurs ont été supprimées par un autre thread? –
Non, je n'ai pas synchronisé l'accès, mais je ne pense pas que je dois le faire. Fondamentalement, les appels sont dans une boucle for simple qui itère sur toute la carte. Il ne fait rien mais fait appel à get() pour les comparaisons. – smessing
-1 - supprimez cette question et recommencez avec le problème REAL, pas de non-sens à propos de TreeMap 'ne fonctionnant pas. Et incluez assez de votre code actuel pour nous donner un indice ... –