Hash table
Hash Table
ハッシュ関数でKeyをハッシュし、得られた結果値をハッシュリストのインデックスとして使用してデータを格納します.保存されている場所は普通に並んでいます!
ハッシュ関数
関数
ハッシュ関数の原理
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;
}
}
Reference
この問題について(Hash table), 我々は、より多くの情報をここで見つけました https://velog.io/@jing07161/Hash-tableテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol