HashMap (или Карта в целом) использует пары ключ / значение. Когда вы добавляете что-то на карту, вы должны указать ключ, и именно этот ключ будет использован позже при получении значения. Основываясь на реализации HashMap с заданным ключом, поиск значения выполняется за время O (1).
containsValue - полезный метод для проверки того, что HashMap содержит искомое значение, но я не совсем понимаю, почему вы используете это для получения искомого значения ??
Корректный способ использования карты будет выглядеть примерно так:
HashMap<Integer, Object> myMap = new HashMap<Integer, Object>();
myMap.put(1, object1);
myMap.put(2, object2);
myMap.put(3, object3);
Теперь вы можете получить свои объекты, выполнив:
Object myObject = myMap.get(1);
Если вы сделали:
myMap.containsValue (1);
это вернет false, поскольку 1 является ключом, а не значением. Вы могли бы сделать:
myMap.containsKey(1);
если вы просто хотите узнать, существует ли он, но при вызове нет проблем:
Object myObject = myMap.get(99);
было бы просто вернуть ноль, если бы не было ключа, 99.
Таким образом, суть в том, что вы правы, нет смысла использовать containsValue, когда вы пытаетесь получить значение. Используйте get или containsKey, если вы хотите сначала проверить существование.