Key를 해시 함수를 통해 해싱한 후 나온 결과값을 hash table의 인덱스로 사용하여 데이터를 저장한다. 저장하는 곳은 보통 배열!
function _hash(key) {
return key % myHashTableSize;
}
_hash(1000) // 2
_hash(500) // 2
set(key, value) {
let index = this._hash(key);
if (!this.dataMap[index]) {
this.dataMap[index] = [];
}
this.dataMap[index].push([key, value]);
}
class HashTable {
constructor(size = 7) {
this.dataMap = new Array(size);
}
_hash(key) {
let hash = 0;
for (let i = 0; i < key.length; i++) {
hash = (hash + key.charCodeAt(i) * 23) % this.dataMap.length;
}
return hash;
}
set(key, value) {
let index = this._hash(key);
if (!this.dataMap[index]) {
this.dataMap[index] = [];
}
this.dataMap.push([key, value]);
return this;
}
get(key) {
let index = this._hash(key);
if (this.dataMap[index]) {
for (let i = 0; i < this.dataMap[index].length; i++) {
if (this.dataMap[index][i][0] === key) {
return this.dataMap[index][i][1];
}
}
}
return undefined;
}
keys() {
let allKeys = [];
for (let i = 0; i < this.dataMap.length; i++) {
if (this.dataMap[i]) {
for (let j = 0; j < this.dataMap[i].length; j++) {
allKeys.push(this.dataMap[i][j][0]);
}
}
}
return allKeys;
}
}