读书人

javascript兑现hashMap

发布时间: 2012-10-07 17:28:51 作者: rapoo

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[this.hashcode_field];      if (hashCode) {        prev = this.backing_hash[hashCode];      } else {        this.code += 1;        hashCode = this.hashkey_prefix + this.code;        key[this.hashcode_field] = hashCode;      }      this.backing_hash[hashCode] = value;    }    return prev;  },  /*   returns value associated with given key   */  get: function(key) {    var value;    if (key) {      var hashCode = key[this.hashcode_field];      if (hashCode) {        value = this.backing_hash[hashCode];      }    }    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[this.hashcode_field];      if (hashCode) {        var prev = this.backing_hash[hashCode];        this.backing_hash[hashCode] = 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")}

读书人网 >JavaScript

热点推荐