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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python开两个守护线程_hdfs守护线程

    python开两个守护线程_hdfs守护线程**守护线程**是区别于用户线程哈,**用户线程**即我们手动创建的线程,而守护线程是程序运行的时候在后台提供一种**通用服务的线程**。垃圾回收线程就是典型的守护线程。

    2022年10月15日
    4
  • js添加事件和移除事件:addEventListener()与removeEventListener()

    js添加事件和移除事件:addEventListener()与removeEventListener()作用:   addEventListener()与removeEventListener()用于处理指定和删除事件处理程序操作。   它们都接受3个参数:事件名、事件处理的函数和布尔值。   布尔值参数是true,表示在捕获阶段调用事件处理程序;如果是false,表示在冒泡阶段调用事件处理程序。示例:环境:移动端,界面禁止触摸事件要在bo

    2022年7月12日
    44
  • C语言qsort函数用法

    C语言qsort函数用法qsort函数简介   排序方法有很多种:选择排序,冒泡排序,归并排序,快速排序等。看名字都知道快速排序是目前公认的一种比较好的排序算法。因为他速度很快,所以系统也在库里实现这个算法,便于我们的使用。这就是qsort函数(全称quicksort)。它是ANSIC标准中提供的,其声明在stdlib.h文件中,是根据二分法写的,其时间复杂度为n*log(n)  功能:

    2022年6月23日
    26
  • 用js来实现那些数据结构06(队列)

    其实队列跟栈有很多相似的地方,包括其中的一些方法和使用方式,只是队列使用了与栈完全不同的原则,栈是后进先出原则,而队列是先进先出(FirstInFirstOut)。一、队列队列是一种特殊的线

    2022年3月25日
    35
  • Python与C/C++的区别(持续更新中……)[通俗易懂]

    Python与C/C++的区别(持续更新中……)[通俗易懂]给C/C++程序员的注释在Python中没有switch语句。你可以使用if..elif..else语句来完成同样的工作(在某些场合,使用字典会更加快捷。)给C/C++程序员的注释在Python

    2022年7月6日
    21
  • 大数据应用及其解决方案(完整版)

    大数据应用及其解决方案(完整版)目录1、大数据概述1.1.概述1.2.大数据定义1.3.大数据技术发展2、大数据应用2.1.大数据应用阐述2.2.大数据应用架构2.3.大数据行业应用2.3.1.医疗行业2.3.2.能源行业2.3.3.通信行业2.3.4.零售业3、大数据解决方案3.1.大数据技术组成3.1.1.分析技术3.1.2.存储数据库…

    2022年6月2日
    52

发表回复

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

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