들어가기 전에
해시에서 키의 값을 찾는 getValue 메소드에 대해 살펴보도록 하겠습니다.
학습 목표
해시에서 키의 값을 찾는 과정을 이해할 수 있습니다.
핵심 단어
- 해시
- getValue 메소드
강의 듣기
들어가기 전에
해시에서 키의 값을 찾는 getValue 메소드에 대해 살펴보도록 하겠습니다.
학습 목표
해시에서 키의 값을 찾는 과정을 이해할 수 있습니다.
핵심 단어
강의 듣기
getValue
키의 값을 찾는 getValue 메소드입니다. 키의 index가 무엇인지 찾고 해시에서 그 index를 찾을 때까지 반복합니다. 그리고 key의 값이 동일하면 그 때 키의 값을 반환합니다.
public V getValue(K key){
// 해당하는 index 찾기
int hashval = key.hashCode();
hashval = hashval & 0x7FFFFFFF;
hashval = hashval % tableSize;
// 그 index를 찾을 때까지 반복
for (HashElement<K, V> he : harray[hashval]){
if (((Comparable<K>)key).compareTo(he.key) == 0){
return he.val;
}
}
return null;
}
생각해보기
1) getValue 메소드의 시간 복잡도는 무엇인가요?
comment
해시 충돌이 드물게 발생해서 연결 리스트의 요소가 1~2개일 경우에는 key에 대응되는 value를 O(1)의 시간복잡도로 찾을 수 있습니다.
그런데, hashCode의 리턴값 또는 나머지 연산의 결과값이 중복되어 해시 충돌이 빈번하게 발생하는 경우 연결 리스트의 길이가 늘어나면서 key값 비교에 걸리는 시간이 증가할 수 있습니다.
따라서, getValue의 시간복잡도는 Best Case: O(1), Worst Case: O(n) 라고 생각합니다.