Me he encontrado con un problema interesante del cual estoy bastante seguro es culpa de HashMap
. Consideremos el siguiente código de depuración (AMAP es un HashMap, clave es un valor pasado a este método)HashMap dice que Key no existe aunque lo hace
System.out.println("getBValues - Given: " + key);
System.out.println("getBValues - Contains Key: " + AMap.containsKey(key));
System.out.println("getBValues - Value: " + AMap.get(key));
for(Map.Entry<A,HashSet<B>> entry : AMap.entrySet()) {
System.out.println("getBValues(key) - Equal: " + (key.equals(entry.getKey())));
System.out.println("getBValues(key) - HashCode Equal: "+(key.hashCode() == entry.getKey().hashCode()));
System.out.println("getBValues(key) - Key: " + entry.getKey());
System.out.println("getBValues(key) - Value: " + entry.getValue());
}
Ahora, en este mapa inserto una sola tecla (Canal) y el valor. Más tarde tratar de obtener el valor de nuevo con get()
y ejecutar este código de depuración que en mi caso da este resultado:
getBValues - Given: Channel(...)
getBValues - Contains Key: false <--- Doesnt contain key?!
getBValues - Value: null <--- Null (bad)
getBValues(key) - Equal: true <--- Given key and AMap key is equal
getBValues(key) - HashCode Equal: true
getBValues(key) - Key: Channel(Same...)
getBValues(key) - Value: [] <--- Not null (This is the expected result)
Como se puede ver, ir a buscar la llave del HashMap directamente no funciona, pero bucle a través de lo Obtenga la misma clave exacta, lo que significa que simplemente no se puede encontrar con get()
. Mi pregunta es ¿qué causaría esto? ¿Cómo puede get()
no encontrar una clave que existe?
Proporcionaré un ejemplo de código de esto, pero parece que no puedo reproducir esto de forma independiente.
¿Alguna sugerencia sobre qué podría estar causando esto?
* "... de lo cual estoy bastante seguro es culpa de HashMap" *. Repite después de mi. "El error está en ** mi ** código". - http://programmers.stackexchange.com/questions/1785/what-should-every-programmer-know-about-programming/1842#1842 –
@Stephen Lo estaba diciendo más como "Alguna 'característica' en HashMap está causando esto " – TheLQ