JavaScript 는 간단 한 HashTable 을 패키지 합 니 다.
3440 단어 JavaScript자바 script
/**
* HashTable
*
* put
* get
* remove
* hashFunc
* resize
* @constructor
*/
function HashTable () {
this.storage = []; //
this.limit = 7; //
this.count = 0; //
//HashTable
//
HashTable.prototype.put = function (key, value) {
var index = this.hashFunc(key, this.limit)
var bucket = this.storage[index]
if (bucket == null) {
bucket = []
this.storage[index] = bucket
}
var override = false
for (var i = 0; i < bucket.length ; i++) {
var tuple = bucket[i]
if (tuple[0] === key) {
tuple[1] = value
override = true
}
}
if (!override) {
bucket.push([key, value])
this.count ++
}
if (this.count > this.limit * .75) {
this.resize(this.limit * 2)
}
}
//
HashTable.prototype.get = function (key) {
var index = this.hashFunc(key, this.limit)
var bucket = this.storage[index]
if (bucket == null) {
return null
}
for (var i = 0; i < bucket.length; i++) {
var tuple = bucket[i]
if (tuple[0] === key) {
return tuple[1]
}
}
return null
}
//
HashTable.prototype.remove = function (key) {
var index = this.hashFunc(key, this.limit)
var bucket = this.storage[index]
if (bucket == null) {
return null
}
for (var i = 0; i < bucket.length; i++) {
var tuple = bucket[i]
if (tuple[0] === key) {
bucket.splice(i, 1)
this.count --
if(this.limit > 7 && (this.count < this.limit * .25)) {
this.resize(Math.floor(this.limit / 2))
}
return tuple[1]
}
}
return null
}
//
HashTable.prototype.resize = function (newLimit) {
var oldStorage = this.storage
this.storage = []
this.limit = newLimit
this.count = 0
for (var i = 0; i < oldStorage.length ; i++) {
var bucket = oldStorage[i]
if (bucket == null) {
continue
}
for (var j = 0; j < bucket.length; j++) {
var tuple = bucket[j]
this.put(tuple[0], tuple[1])
}
}
}
//
HashTable.prototype.hashFunc = function (str, size) {
var hashCode = 0
for (var i = 0; i < str.length; i++) {
hashCode = 37 * hashCode + str.charCodeAt(i)
}
var index = hashCode % size
return index;
}
}
var a = new HashTable();
a.put("cat", " ");
a.put("dog", " ");
a.put("egg", " ");
a.put("dogss", " sd");
a.put("eggss", " s");
a.put("eggsssd", " sds");
console.log(a);
a.remove("eggsssd");
a.remove("dogss");
a.remove("eggss");
a.remove("egg");
a.remove("dog");
console.log(a);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.