Un HashMap (o mapa en general) utiliza pares clave/valor. Cuando agrega algo al mapa, debe especificar una clave y esa es la clave que se utilizará más adelante al recuperar el valor. Basado en la implementación de HashMap, dada una clave, la recuperación de un valor se realiza en O (1) vez.
containsValue es un método útil para comprobar que un HashMap contiene el valor que está buscando, pero realmente no veo por qué lo está utilizando para recuperar el valor que está buscando ??
La forma correft utilizar un mapa sería algo así como:
HashMap<Integer, Object> myMap = new HashMap<Integer, Object>();
myMap.put(1, object1);
myMap.put(2, object2);
myMap.put(3, object3);
Ahora usted puede conseguir sus objetos haciendo:
Object myObject = myMap.get(1);
Si lo hizo:
myMap.containsValue (1);
esto devolvería falso, ya que 1 es la clave, no el valor. Se podría hacer:
myMap.containsKey(1);
si lo que desea saber si es que existe, pero no hay ningún problema en llamar:
Object myObject = myMap.get(99);
que sólo devuelve un valor nulo si no había llave, 99.
Así que, básicamente, el punto es que estás en lo cierto, no tiene sentido usar containsValue cuando tratas de recuperar el valor. Usa get o containsKey si quieres verificar primero si hay existencia.
containsValue() atravesará el HashMap: http://www.docjar.com/html/api/java/util/HashMap.java.html#631 Si quiere saber si un valor está en el Mapa , esta información debe mantenerse en un Conjunto separado. –
sí, lo sé, pero su pregunta era "¿por qué usar containsValue() si tengo que atravesarlo después?" así que lo traduje al por qué es válido para containsValue si necesita atravesar el hashmap después (por segunda vez). – sanjuro