hash 충돌이 발생했을 때, 그 다음 주소를 확인하고 비어 있다면 그 자리에 대신 저장하는 해시테이블 기반 자료구조
** 다른 메서드들은 기존에 만들었던 해시테이블과 동일하나 put, get, remove 메서드만 다르다.
put (key, value) {
let index = this.hashCode(key);
let startIndex = index;
do {
if (this.table[index] === undefined) {
this.table[index] = new Element(key, value);
this.length++;
return true;
}
index = (index + 1) % HASH_SIZE;
} while (index !== startIndex);
return false;
};
위의 put 메서드와 비슷하지만, key가 동일한지 묻는 과정이 추가된다.
get(key) {
let index = this.hashCode(key);
let startIndex = index;
do {
if (this.table[index] !== undefined && this.table[index].key === key) {
return this.table[index].value;
}
index = (index + 1) % HASH_SIZE;
} while (index !== startIndex);
return undefined;
}
위의 put 메서드와 비슷하다.
remove(key) {
let index = this.hashCode(key);
let startIndex = index;
do {
if (this.table[index] !== undefined && this.table[index].key === key) {
let element = this.table[index];
delete this.table[index];
this.length--;
return element;
}
index = (index + 1) % HASH_SIZE;
} while (index !== startIndex);
return undefined;
}
관련 전체 코드는 Git에 업로드 해두었습니다.
Github_LinearHushTable