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]