前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript实现哈希表数据结构[通俗易懂]

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

作者头像
全栈程序员站长
发布2022-07-25 12:15:52
3980
发布2022-07-25 12:15:52
举报
文章被收录于专栏:全栈程序员必看

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

一、简单说明

1、JavaScript是没有哈希表数据结构的,那么当我们需要用到类似哈希表这样的键值对数据结构时怎么办?答案就是自己实现一个,我们可以利用JavaScript的一些特性来实现自己的哈希表数据结构。

2、首先,哈希表是一种键值对数据结构,键是唯一的,这个特征跟JavaScript的Object对象有点类似,Object对象的属性是唯一的,属性和值的映射就像是键值对一样,那么我们可以用一个Object对象来代表键值对的存储,再加上一个size变量用来记录键值对的数量,这样简单的键值对存储结构就有了。

3、其次,哈希表有哪些常用的方法:

put -> 往哈希表放入一个键值对

get -> 从哈希表获取一个指定键的值

remove -> 从哈希表删除指定键关联的键值对

getSize -> 获取哈希表键值对数量

clear -> 清空哈希表中的所有键值对

containsKey -> 判断哈希表是否存在指定的键

containsValue -> 判断哈希表是否存在指定的值

getKeys -> 获取哈希表中所有的键列表

getValues -> 获取哈希表中所有键值对的值列表

4、上述第三点各个方法的实现如代码所示。

二、代码实现如下

代码语言:javascript
复制
/**
 * 实现哈希表的数据结构
 */
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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月9,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、简单说明
  • 二、代码实现如下
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档