저는 흥미로운 문제가 생겼습니다. 나는 확실히 HashMap
의 오류입니다. 다음 코드를 디버깅을 고려 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());
}
지금이지도에 내가 하나의 키 (채널) 및 값을 삽입 (AMAP는 HashMap의이며, 키는이 메서드에 전달 된 값입니다). 나중에 나는 시도하고
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()
은 존재하는 키를 어떻게 찾을 수 없습니까?
이 예제 코드를 제공 하겠지만이 코드는 독립적으로 재현 할 수 없습니다.
무엇이 발생했는지에 대한 제안이 있으십니까?
* "나는 확실히 HashMap의 잘못입니다."*. 나 후에 반복해라. "버그는 ** my ** 코드에 있습니다." - http://programmers.stackexchange.com/questions/1785/what-should-every-programmer-know-about-programming/1842#1842 –
@Stephen HashMap에서 "일부 '기능'이 이 " – TheLQ