해시맵의 해시코드.
코드를 먼저 부착합니다.
HashMap map = new HashMap();
map.put("ab", 1);
map.put("2", 2);
System.out.println("map.hashcode:"+map.hashCode());
출력 결과map.hashcode:3152
입니다. 이제 알겠습니다. 저희가 정의한 맵의 해시 값은 3152입니다.이 결과는 어떻게 계산해 냈습니까?먼저 hashCode 를 실행하는 방법을 살펴보겠습니다.
public int hashCode() {
int h = 0;
Iterator<Entry<K,V>> i = entrySet().iterator();
while (i.hasNext())
h += i.next().hashCode();
return h;
}
즉, entrySet의 모든hashCode를 가져오면 맵의hashCode를 얻을 수 있다.이 entrySet의 코드는 계속 붙입니다.
public Set<Map.Entry<K,V>> entrySet() {
return entrySet0();
}
private Set<Map.Entry<K,V>> entrySet0() {
Set<Map.Entry<K,V>> es = entrySet;
return es != null ? es : (entrySet = new EntrySet());
}
이 맵의 엔트리 집합을 가져오는 겁니다.이 단계에서 요약하면 다음과 같다. 하나의 맵의 해시 값을 얻는 것은 맵의 모든 Entry를 얻는 것이다. 모든 Entry의 해시 값을 구하고 더하면 된다.
계속해서 Entry 정의를 봅니다.Map 클래스에서
interface Entry<K,V> {
K getKey();
V getValue();
V setValue(V value);
boolean equals(Object o);
int hashCode();
}
HashMap 클래스에서 다음을 수행합니다.static class Entry<K,V> implements Map.Entry<K,V> {
/** . . . */
public final int hashCode() {
return (key==null ? 0 : key.hashCode()) ^
(value==null ? 0 : value.hashCode());
}
}
자, 엔트리마다hashCode는 어떻게 계산합니까?키의 해시코드가 다르거나 value의 해시코드입니다.자, 이제 아까의 예로 돌아가겠습니다.맵의 해시 값은 무엇입니까?
"ab".hashCode()^1.hashCode()
+
"2".hashCode^2.hashCode()
String과 Integer의 hashcode 방법에 관해서는 붙이지 않겠습니다. 위의 값을 책임감 있게 말씀드리겠습니다.0b 110000100001 ^ 0b 1 + 0b 110010 ^ 0b 10 = 0b 110000100000 + 0b 110000 = 3104 + 48 = 3152
드디어 계산이 나왔다.
해시의 장점에 관해서는 며칠 후에 다시 이야기하자.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[프로그래머스 / 완전 탐색] 메뉴 리뉴얼 (c++)문제와 제한 사항이 조금 복잡해서 직접 읽는 것이 더 편할 것이다 이번 문제 역시 직접 값들을 하나하나 찾아야 한다. 문제 해결을 2파트로 나눌 수 있다. 1. orders 배열에 있는 각 주문들이 만들 수 있는 조...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.