大家好,又见面了,我是你们的朋友全栈君。
1、JavaScript是没有哈希表数据结构的,那么当我们需要用到类似哈希表这样的键值对数据结构时怎么办?答案就是自己实现一个,我们可以利用JavaScript的一些特性来实现自己的哈希表数据结构。
2、首先,哈希表是一种键值对数据结构,键是唯一的,这个特征跟JavaScript的Object对象有点类似,Object对象的属性是唯一的,属性和值的映射就像是键值对一样,那么我们可以用一个Object对象来代表键值对的存储,再加上一个size变量用来记录键值对的数量,这样简单的键值对存储结构就有了。
3、其次,哈希表有哪些常用的方法:
put -> 往哈希表放入一个键值对
get -> 从哈希表获取一个指定键的值
remove -> 从哈希表删除指定键关联的键值对
getSize -> 获取哈希表键值对数量
clear -> 清空哈希表中的所有键值对
containsKey -> 判断哈希表是否存在指定的键
containsValue -> 判断哈希表是否存在指定的值
getKeys -> 获取哈希表中所有的键列表
getValues -> 获取哈希表中所有键值对的值列表
4、上述第三点各个方法的实现如代码所示。
/**
* 实现哈希表的数据结构
*/
function HashTable() {
var size = 0;
var entry = new Object();
// 增加键值对
this.put = function(key, value) {
// 已存在key则更新value,否则新增
if (!this.containsKey(key)) {
++size;
}
entry[key] = value;
};
// 获取键对应的值
this.get = function(key) {
return (this.containsKey(key) ? entry[key] : null);
};
// 删除指定键对应的值
this.remove = function(key) {
if (this.containsKey(key) && (delete entry[key])) {
--size;
}
};
// 判断一个key是否存在
this.containsKey = function(key) {
return (key in entry);
};
// 判断一个value是否存在
this.containsValue = function (value) {
for (var key in entry) {
if (entry[key] == value) {
return true;
}
}
return false;
};
// 返回哈希表的所有key
this.getKeys = function() {
var keys = new Array();
for (var key in entry) {
keys.push(key);
}
return keys;
};
// 返回哈希表的所有value
this.getValues = function() {
var values = new Array();
for (var key in entry) {
values.push(entry[key]);
}
return values;
};
// 返回哈希表键值对数量
this.getSize = function() {
return size;
};
// 清空哈希表
this.clear = function() {
size = 0;
entry = new Object();
};
}
/*--- 以下为测试数据 ---*/
// 初始化一个hashTable对象
var hashtable = new HashTable();
// 打印hashTable的所有key
console.log(hashtable.getKeys());
// 打印hashTable的所有key
hashtable.put("name", "Edward");
hashtable.put("age", 5);
// 获取键值对数量
console.log(hashtable.getSize());
// 打印hashTable的所有key
console.log(hashtable.getKeys());
// 获取指定key的值
console.log(hashtable.get("name"));
console.log(hashtable.get("email"));
hashtable.clear();
// 获取键值对数量
console.log(hashtable.getSize());
// 打印hashTable的所有key
console.log(hashtable.getKeys());
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/127348.html原文链接:https://javaforall.cn