Я столкнулся с интересной проблемой, которая, я уверен, является ошибкой HashMap
.Рассмотрим следующий отладочный код (AMap - это HashMap, ключ - это значение, передаваемое этому методу)
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());
}
Теперь в этой карте я вставляю один ключ (канал) и значение.Позже я пытаюсь вернуть значение с помощью get()
и запустить этот код отладки, который в моем случае выдает следующее:
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)
Как вы можете видеть, получение ключа непосредственно из HashMap не работаетно, перебирая, я получаю точно такой же ключ, то есть его там просто невозможно найти с get()
.Мой вопрос: что может быть причиной этого?Как get()
не может найти ключ, который существует?
Я приведу пример кода, но не могу воспроизвести его независимо.
Любые предложения о том, что может быть причиной этого?