아래 내용은 부스트코스 <자바로 구현하고 배우는 자료구조> 강의를 들으며 정리한 것입니다.
add, remove
해시에 요소를 추가하고 삭제하는 코드. 연결 리스트의 addFirst로 add한다.
public boolean add(K key, V value){
if (loadFactor() > maxLoadFactor) // 적재율 확인
resize(tableSize*2); // resize 메소드 - 테이블 크기 2배로 늘이기
// 키와 값을 저장해 놓을 object he 정의
HashElement<K,V> he = new HashElement(key, value);
// he의 index 찾기
int hashval = key.hashCode();
hashval = hashval & 0x7FFFFFFF; // 양수만들기
hashval = hashval % tableSize; // 크기최적화
// add he
hashArray[hashval].add(he);
numElements++;
return true;
}
public boolean remove(K key, V value){
// index 찾기
int hashval = key.hashCode();
hashval = hashval & 0x7FFFFFFF; // 양수만들기
hashval = hashval % tableSize; // 크기최적화
// 해당하는 index의 키와 값 제거
hashArray[hashval].remove(he);
numElements--;
return true;
}
getValue
해시에서 index값을 찾는 코드.
public V getValue(K key){
// 해당하는 index 찾기
int hashval = key.hashCode();
hashval = hashval & 0x7FFFFFFF;
hashval = hashval % tableSize;
// 그 index를 찾을 때까지 반복
for (HashElement<K, V> he : harray[hashval]){ // Iterator
if (((Comparable<K>)key).compareTo(he.key) == 0){
return he.val;
}
}
return null;
}
Q. getValue의 시간 복잡도는?
A. 해시 충돌이 많이 발생한 경우 더 걸릴 수 있으나 그렇지 않을 경우 대체로 O(1)이 된다.
'Programming > java 자료구조' 카테고리의 다른 글
| 4-1) 힙(Heap) - 힙과 트리, tree levels, 추가와 제거 (0) | 2022.08.27 |
|---|---|
| 3-6) 해시 - resize, key반복자 (0) | 2022.08.20 |
| 3-4) 해시 - 재해싱, 해시 클래스, 내부 클래스, 생성자 (0) | 2022.08.18 |
| 3-3) 해시 - LoadFactor 메소드, 충돌 해결, 체이닝 (0) | 2022.08.13 |
| 3-2) 해시 - 문자열, 해시 크기 최적화, 양수로 반환 (0) | 2022.08.13 |