JavaScript实现哈希表数据结构[通俗易懂]

一、简单说明1、JavaScript是没有哈希表数据结构的,那么当我们需要用到类似哈希表这样的键值对数据结构时怎么办?答案就是自己实现一个,我们可以利用JavaScript的一些特性来实现自己的哈希表数据结构。2、首先,哈希表是一种键值对数据结构,键是唯一的,这个特征跟JavaScript的Object对象有点类似,Object对象的属性是唯一的,属性和值的映射就像是键值对一样,那么我们可以用一个…

大家好,又见面了,我是你们的朋友全栈君。

一、简单说明

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.net/127348.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月9日 下午5:00
下一篇 2022年4月9日 下午5:20


相关推荐

  • B样条曲线拟合原理「建议收藏」

    B样条曲线拟合原理「建议收藏」1.与贝塞尔曲线对比B样条曲线是在Bezier曲线基础上发展起来的一类曲线,它克服了Bezier曲线整体控制性所带来的不便,最常用的是二次和三次B样条曲线。2.二次B样条2.1参数方程已知三个平面离散点P0、P1、P2,由这三点可以定义二次抛物线段,其参数矢量方程形式为:二次B样条曲线参数方程的矩阵形式为:对比着看,

    2022年6月18日
    68
  • Windows远程桌面开发之九-虚拟显示器(Windows 10 Indirect Display 虚拟显示器驱动开发)[通俗易懂]

    Windows远程桌面开发之九-虚拟显示器(Windows 10 Indirect Display 虚拟显示器驱动开发)[通俗易懂]byfanxiushu2019-06-24转载或引用请注明原始作者。这里与远程桌面关系不是太大,但这个部分是xdisp_virt远程控制程序的实现多显示器桌面扩展的子功能,因此也归为远程桌面开发一类。这篇文章与之前发布的…

    2022年8月21日
    11
  • 分支定界法 python_分支定界法

    分支定界法 python_分支定界法分支定界法 branchandbou 是一种求解离散数据组合的最优化问题 该算法执行的效率取决于你所找的问题解空间的上下界 如果找到一个很紧凑的上下界进行剪枝操作 该算法的执行效率会非常高 因此它是最有可能在多项式时间内求解 NP 问题的算法 使用分支定界算法的一般步骤为 构造一棵搜索树 该搜索树指的是所有解空间 因此通过遍历该搜索树可以遍历到所有的解 构造问题解的上下界 上界一般为之前求出的

    2026年3月19日
    1
  • 老板总是忽视我的辛苦,怎么办? 3点实用建议送给你

    老板总是忽视我的辛苦,怎么办? 3点实用建议送给你

    2022年2月18日
    80
  • Python for循环的使用

    Python for循环的使用Pythonfor循环的使用(一)for循环的使用场景1.如果我们想要某件事情重复执行具体次数的时候可以使用for循环。2.for循环主要用来遍历、循环、序列、集合、字典,文件、甚至是自定义类或函数。(二)for循环操作列表实例演示使用for循环对列表进行遍历元素、修改元素、删除元素、统计列表中元素的个数。1.for循环用来遍历整个列表#for循环主

    2022年8月12日
    10
  • hmacsha256算法原理_一次解析

    hmacsha256算法原理_一次解析需要支持HMACSHA256算法,GitHub找到源码具体地址https://github.com/aperezdc/hmac-sha256/blob/master/hmac-sha256.c移植到目标平台,稍作处理测试ok了,原理:1.输入密钥key和固定的数据(0x36)进行异或操作生成一个64B的数据kx;2.使用kx+输入数据执行sha256算法得到32B的out;3.使用…

    2025年8月15日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号