JS 实现 HashMap

HashMap代码(这种实现方式是错误的,错误原因:代码中_map、_length变量是HashMap的所有实例共用的):

/**
 * HashMap
 * 2021年09月09日
 */

(function (global) {
    var _map;
     _length;

    global.HashMap =  () {
        _map = {};
        _length = 0;
    };

    global.HashMap.prototype = {
        put:  (key,value) {
            if (!_map.hasOwnProperty(key)) {
                _length++;
            }
            _map[key] = value;
        },get:  (key) {
            if (_map.hasOwnProperty(key)) {
                return _map[key];
            }
            return null;
        },containsKey:  _map.hasOwnProperty(key);
        },size:  () {
             _length;
        },remove:  (_map.hasOwnProperty(key)) {
                _length--;
                deletefalse () {
            _map = {};
        },keys: var keys = [];
            for (var item in _map) {
                keys.push(item);
            }
             keys;
        },values: var values = _map) {
                values.push(_map[item]);
            }
             values;
        }
    };

    global.HashMap.prototype.constructor = global.HashMap;

})(window);
View Code

HashMap代码(正确的实现):



HashMap =  () {
    this._length = 0;
    this._map = {};
};

HashMap.prototype = {
    put: this._map.hasOwnProperty(key)) {
            this._length++;
        }
        this._map[key] = value;
    },1)"> (key) {
        if (._map[key];
        }
        ;
    },1)">._map.hasOwnProperty(key);
    },1)"> () {
        ._length;
    },1)">this._length--;
            delete ;
         {};
    },1)"> [];
        in ._map) {
            keys.push(item);
        }
         keys;
    },1)">._map) {
            values.push(._map[item]);
        }
         values;
    }
};

HashMap.prototype.constructor = HashMap;
View Code

测试代码:

<!DOCTYPE html>
<htmlhead>
    title>HashMap测试</>

    meta charset="utf-8" />
    http-equiv="X-UA-Compatible" content="IE=edge"name="viewport"="width=device-width,initial-scale=1"style type="text/css"stylescript ="text/javascript" src="jquery-1.7.1.js"></script="hashmap.js">

bodyinput ="button" value="测试1" onclick="testHashMap()" ="测试2"="testArray()" div id="div" style="height:800px;"div="text/javascript">
        var n = 100000;
         div = $("#div);

        //测试数据
        debugger list  [];
         map new HashMap();
        for ( i 1; i <= n; i++) {
             val  Math.floor(Math.random() * n);
             key key" + val;

            if!map.containsKey(key)) {
                map.put(key,val);
                list.push({ key: key,value: val });
            }
        }
        div.append(测试数据初始化完成,数据量:Array  list.length + ,HashMap  map.size() <br />测试HashMap
        function testHashMap() {
             t1  Date().getTime();

             sum 0;
             count 20000<= 21000; i) {
                 i;

                 (map.containsKey(key)) {
                     num  map.get(key);
                    count;
                    sum += num;
                }
            }

             t2  Date().getTime();

            div.append(完成,结果:sum=,count=耗时 (t2 - t1).toString() 毫秒<br />);
        }

        测试Array
         testArray() {
             k ; k < list.length; k) {
                     i;
                     item  list[k];

                     (item.key == key) {
                        count;
                        sum  item.value;
                    }
                }
            }

            );
        }

    >
View Code

 

相关文章

1.第一步 设置响应头 header(&#39;Access-Control-Allow...
$.inArray()方法介绍 $.inArray()函数用于在数组中搜索指定的...
jquery.serializejson.min.js的妙用 关于这个jquery.seriali...
JS 将form表单数据快速转化为object对象(json对象) jaymou...
jQuery插件之jquery.spinner数字智能增减插件 参考地址:http...