angie_hawk7 发表于 2013-1-19 04:14:59

javascript实现hashMap

/* ===================================================================== @license MIT @author Daniel Kwiecinski <daniel.kwiecinski@lambder.com> @copyright 2009 Daniel Kwiecinski. @end ===================================================================== */var HashMap = function() {this.initialize();}HashMap.prototype = {hashkey_prefix: "<#HashMapHashkeyPerfix>",hashcode_field: "<#HashMapHashkeyPerfix>",initialize: function() {    this.backing_hash = {};    this.code = 0;},/*   maps value to key returning previous assocciation   */put: function(key, value) {    var prev;    if (key && value) {      var hashCode = key;      if (hashCode) {      prev = this.backing_hash;      } else {      this.code += 1;      hashCode = this.hashkey_prefix + this.code;      key = hashCode;      }      this.backing_hash = value;    }    return prev;},/*   returns value associated with given key   */get: function(key) {    var value;    if (key) {      var hashCode = key;      if (hashCode) {      value = this.backing_hash;      }    }    return value;},/*   deletes association by given key.   Returns true if the assocciation existed, false otherwise   */del: function(key) {    var success = false;    if (key) {      var hashCode = key;      if (hashCode) {      var prev = this.backing_hash;      this.backing_hash = undefined;      if(prev !== undefined)          success = true;      }    }    return success;}}//// Usage// creationvar my_map = new HashMap();// insertionvar a_key = {};var a_value = {struct: "structA"};var b_key = {};var b_value = {struct: "structB"};var c_key = {};var c_value = {struct: "structC"};my_map.put(a_key, a_value);my_map.put(b_key, b_value);my_map.put("1","one");my_map.put("1","one");var prev_b = my_map.put(b_key, c_value);// retrievalif(my_map.get(a_key) !== a_value){throw("fail1")}if(my_map.get(b_key) !== c_value){throw("fail2")}if(prev_b !== b_value){throw("fail3")}// deletionvar a_existed = my_map.del(a_key);var c_existed = my_map.del(c_key);var a2_existed = my_map.del(a_key);if(a_existed !== true){throw("fail4")}if(c_existed !== false){throw("fail5")}if(a2_existed !== false){throw("fail6")}
页: [1]
查看完整版本: javascript实现hashMap