1. 程式人生 > >Javascript實現HashTable(雜湊表)

Javascript實現HashTable(雜湊表)

1.雜湊表

ES6特性(詳細可看阮一峰)

Set 物件類似於陣列,且成員的值都是唯一的。

Map 物件是鍵值對集合,和 JSON 物件類似,但是 key 不僅可以是字串還可以是物件

其中Map中的鍵名也可以是物件這個特性極大的方便了開發,但是在ES6之前是沒有辦法的,只能模擬,但是很麻煩。

但是可以模擬一個hashTable來方便開發,其實javascript的object的屬性其實與雜湊表非常類似。

var person = {};
person["name"] = "關羽";

我們只需要在其基礎上再封裝一些HashTable的函式,就能夠得到一個精簡版的雜湊表。

函式名 說明 返回值
add(key,value) 新增項
getValue(key) 根據key取值 object
remove(key) 根據key刪除一項
containsKey(key) 是否包含某個key bool
containsValue(value) 是否包含某個值 bool
getValues() 獲取所有的值的陣列 array
getKeys() 獲取所有的key的陣列 array
getSize() 獲取項總數 int
clear() 清空雜湊表

2.程式碼實現

function HashTable() {
    var size = 0;
    var entry = new Object();
    this.add = function (key, value) {
        if (!this.containsKey(key)) {
            size++;
        }
        entry[key] = value;
    }
    this.getValue = function (key) {
        return this.containsKey(key) ? entry[key] : null;
    }
    this.remove = function (key) {
        if (this.containsKey(key) && (delete entry[key])) {
            size--;
        }
    }
    this.containsKey = function (key) {
        return (key in entry);
    }
    this.containsValue = function (value) {
        for (var prop in entry) {
            if (entry[prop] == value) {
                return true;
            }
        }
        return false;
    }
    this.getValues = function () {
        var values = new Array();
        for (var prop in entry) {
            values.push(entry[prop]);
        }
        return values;
    }
    this.getKeys = function () {
        var keys = new Array();
        for (var prop in entry) {
            keys.push(prop);
        }
        return keys;
    }
    this.getSize = function () {
        return size;
    }
    this.clear = function () {
        size = 0;
        entry = new Object();
    }
}
簡單示例
var manHT = new HashTable();
manHT.add("p1","劉備");
manHT.add("p2","關羽");
$("#div1").text(manHT.getValue("p1"));