JS实现哈希表与Map详解:从入门到理解

想要深入学习JavaScript中的数据结构?本文将带你用JS实现一个简单的哈希表,并通过实现一个简易的Map来帮助你理解其工作原理。

哈希表实现

以下是用JavaScript实现的简单哈希表代码:javascript// 哈希表的实现class HashTable { constructor() { this.table = {}; }

// 哈希函数:将键转换为哈希码 hash(key) { let hash = 0; for (let i = 0; i < key.length; i++) { hash += key.charCodeAt(i); } return hash; }

// 向哈希表中插入键值对 set(key, value) { const hashedKey = this.hash(key); this.table[hashedKey] = value; }

// 根据键获取值 get(key) { const hashedKey = this.hash(key); return this.table[hashedKey]; }

// 从哈希表中删除键值对 delete(key) { const hashedKey = this.hash(key); delete this.table[hashedKey]; }

// 判断键是否存在 has(key) { const hashedKey = this.hash(key); return this.table.hasOwnProperty(hashedKey); }}

// 使用哈希表const myHashTable = new HashTable();myHashTable.set('name', 'John');myHashTable.set('age', 30);console.log(myHashTable.get('name')); // 输出: Johnconsole.log(myHashTable.get('age')); // 输出: 30console.log(myHashTable.has('name')); // 输出: truemyHashTable.delete('age');console.log(myHashTable.has('age')); // 输出: false

代码解析:

  1. HashTable: 代表我们自定义的哈希表结构。2. constructor(): 初始化一个空对象 table 用于存储数据。3. hash(key): 哈希函数,将传入的键 key 转换为数值型的哈希码。4. set(key, value): 向哈希表插入键值对,使用哈希函数计算键的哈希码作为索引,存储对应的值。5. get(key): 根据键获取值,同样使用哈希函数找到对应索引,返回相应的值。6. delete(key): 根据键删除键值对。7. has(key): 判断哈希表中是否存在某个键。

Map 实现

接下来我们用JavaScript内置的 Map 对象实现一个简单的 SimpleMap 类:javascript// Map 的简单实现class SimpleMap { constructor() { this.map = new Map(); }

// 添加键值对 set(key, value) { this.map.set(key, value); }

// 根据键获取值 get(key) { return this.map.get(key); }

// 删除键值对 delete(key) { this.map.delete(key); }

// 判断键是否存在 has(key) { return this.map.has(key); }}

// 使用 Mapconst myMap = new SimpleMap();myMap.set('name', 'John');myMap.set('age', 30);console.log(myMap.get('name')); // 输出: Johnconsole.log(myMap.get('age')); // 输出: 30console.log(myMap.has('name')); // 输出: truemyMap.delete('age');console.log(myMap.has('age')); // 输出: false

代码解析

SimpleMap 类是对JavaScript内置 Map 对象的简单封装,它提供了和 HashTable 类似的接口:

  • set(key, value):添加键值对。- get(key):根据键获取值。- delete(key):删除键值对。- has(key):判断键是否存在。

总结

通过以上两个简单的示例,你可以初步了解哈希表和 Map 的概念及使用方法。 实际应用中,JavaScript 的内置 Map 对象性能通常优于自定义的哈希表,建议优先使用。

JS实现哈希表与Map详解:从入门到理解

原文地址: https://www.cveoy.top/t/topic/QaO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录