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


相关推荐

  • pki基于对称加密算法保证网络通信安全_网络安全体系结构

    pki基于对称加密算法保证网络通信安全_网络安全体系结构PKI(PublicKeyInfrastructure的缩写)即”公开密钥体系”,是一种遵循既定标准的密钥管理平台,它能够为所有网络应用提供加密和数字签名等密码服务及所必需的密钥和证书管理体系,简单来说,PKI就是利用公钥理论和技术建立的提供安全服务的基础设施。PKI技术是信息安全技术的核心,也是电子商务的关键和基础技术。原有的单密钥加密技术采用特定加密密钥加密数据,而解密时用于解密的密

    2022年8月22日
    6
  • 快速排序

    //快速排序voidQuickSort(int*pArr,intnLeft,intnRight){inti=nLeft;intj=nRight;intnCanka

    2021年12月18日
    43
  • InnoDB中的索引类型

    InnoDB中的索引类型InnoDB数据引擎使用B+树构造索引结构,其中的索引类型依据参与检索的字段不同可以分为主索引和非主索引;依据B+树叶子节点上真实数据的组织情况又可以分为聚族索引和非聚族索引。每一个索引B+树结构都会有一个独立的存储区域来存放,并且在需要进行检索时将这个结构加载到内存区域。真实情况是InnoDB引擎会加载索引B+树结构到内存的BufferPool区域。聚簇索引(聚集索引)聚簇索引指的是这样的数据组织结构:索引B+树的每个叶子节点直接对应了真实的DataPage。并且B+树所有的叶子节点在最底层共同描

    2022年6月1日
    33
  • 免费的网络传真平台_发传真不显示发送号码

    免费的网络传真平台_发传真不显示发送号码首先我们看到的是免费网络传真:faxZERO  官方网址是:http://faxzero.com/  这个免费传真适用于美国和加拿大,发送的传真上会自动附上广告,每次发传真只能发三页,也每天只可以发两次。  faxZERO无需你拥有一台传真机,也不需要注册用户即可在线发送免费网络传真,每天可发送2个免费网络传真,每个免费网络传真最多可发3个页面,支持.DOC(Word)和.

    2022年4月19日
    43
  • 利用charles抓包

    利用charles抓包charles是一款http抓包软件,和fiddler极为相似,所以大家就会问,为啥不用fiddler呢,因为mac没有fiddler。而且charles还是付费版本。所以我们这里从安装破解到抓包成功一步一步讲清楚。下载并安装我们进入charles官网进行下载:https://www.charlesproxy.com/latest-release/download.do,我是mac,所以选择其中的macOS下载dmg包之后我们正常的安装,安装完成打开,大概就是这样的模样破解我们打开激活码生成界

    2022年6月6日
    44
  • YOLO v3算法详解「建议收藏」

    YOLO v3算法详解「建议收藏」论文地址:YOLOv3:AnIncrementalImprovementYOLO算法详解,YOLOv2算法详解1.TheDeal接下来,从头梳理整个网络,如果对YOLO和YOLOv2不熟悉,可以看一下我之前的博客。1.1BoundingBoxPredictionYOLOv3沿用YOLO9000预测boundingbox的方法,通过尺寸聚类确定anchorbox。对每个boundingbox网络预测4个坐标偏移。如果featuremap某一单元偏移图片左上角坐标

    2022年6月28日
    31

发表回复

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

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