zoukankan      html  css  js  c++  java
  • javascript 实现HashTable(哈希表)

    一、javascript哈希表简介

    javascript里面是没有哈希表的,一直在java,C#中有时候用到了这一种数据结构,javascript里面若没有,感觉非常不顺手。细细看来,其实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() 清空哈希表

    二、代码实现

    其具体的实现可以查看代码,都不算很复杂的东西。

    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"));
  • 相关阅读:
    bzoj2018 [Usaco2009 Nov]农场技艺大赛
    2014.9.27模拟赛【栅栏迷宫】
    cf471B MUH and Important Things
    cf471A MUH and Sticks
    bzoj3016 [Usaco2012 Nov]Clumsy Cows
    bzoj3404 [Usaco2009 Open]Cow Digit Game又见数字游戏
    bzoj1633 [Usaco2007 Feb]The Cow Lexicon 牛的词典
    bzoj3299 [USACO2011 Open]Corn Maze玉米迷宫
    codevs1040 统计单词个数
    codevs1039 数的划分
  • 原文地址:https://www.cnblogs.com/kissdodog/p/4666352.html
Copyright © 2011-2022 走看看