哈希表以及用js封装一个哈希表
发布人:shili8
发布时间:2024-12-10 06:44
阅读次数:0
**哈希表概述**
哈希表(Hash Table)是一种常见的数据结构,用于快速查找、插入和删除元素。它通过使用散列函数将键值对映射到一个固定大小的数组中,从而实现高效的存取。
**哈希表的基本特性**
1. **快速查找**: 哈希表可以在常数时间复杂度内找到一个给定键的值。
2. **插入和删除**: 哈希表可以在常数时间复杂度内插入或删除一个元素。
3. **散列函数**: 哈希表使用散列函数将键值对映射到一个固定大小的数组中。
**哈希表的应用场景**
1. **缓存**: 哈希表可以用于实现缓存,快速查找和插入缓存中的数据。
2. **计数器**: 哈希表可以用于实现计数器,快速统计元素出现的次数。
3. **集合**: 哈希表可以用于实现集合,快速检查元素是否存在。
**JavaScript 中哈希表的封装**
下面是 JavaScript 中哈希表的封装示例:
javascriptclass HashTable { constructor() { // 初始化一个空数组作为哈希表的底层存储 this.table = new Array(16).fill(null); } /** * 将键值对添加到哈希表中 * @param {string} key 键 * @param {*} value 值 */ put(key, value) { // 计算散列函数的结果,用于确定键值对在哈希表中的位置 const index = this._hash(key); if (!this.table[index]) { // 如果该位置为空,则创建一个新数组作为哈希表的子项 this.table[index] = new Array(16).fill(null); } // 将键值对添加到哈希表中 const bucket = this.table[index]; for (let i =0; i < bucket.length; i++) { if (!bucket[i]) { // 如果该位置为空,则将键值对添加到该位置 bucket[i] = [key, value]; return; } if (bucket[i][0] === key) { // 如果该位置已有相同的键,则更新值 bucket[i][1] = value; return; } } } /** * 从哈希表中获取一个给定键的值 * @param {string} key 键 */ get(key) { // 计算散列函数的结果,用于确定键在哈希表中的位置 const index = this._hash(key); if (this.table[index]) { // 如果该位置有数据,则遍历该位置的所有键值对 const bucket = this.table[index]; for (let i =0; i < bucket.length; i++) { if (bucket[i] && bucket[i][0] === key) { // 如果找到匹配的键,则返回相应的值 return bucket[i][1]; } } } // 如果找不到匹配的键,则返回 undefined return undefined; } /** * 从哈希表中删除一个给定键的值 * @param {string} key 键 */ remove(key) { // 计算散列函数的结果,用于确定键在哈希表中的位置 const index = this._hash(key); if (this.table[index]) { // 如果该位置有数据,则遍历该位置的所有键值对 const bucket = this.table[index]; for (let i =0; i < bucket.length; i++) { if (bucket[i] && bucket[i][0] === key) { // 如果找到匹配的键,则删除该键值对 bucket.splice(i,1); return; } } } } /** * 计算散列函数的结果 * @param {string} key 键 */ _hash(key) { // 使用一个简单的散列函数计算结果 let hash =0; for (let i =0; i < key.length; i++) { hash += key.charCodeAt(i); } return hash % this.table.length; } }
**示例使用**
javascriptconst hashTable = new HashTable(); hashTable.put('key1', 'value1'); hashTable.put('key2', 'value2'); console.log(hashTable.get('key1')); // value1console.log(hashTable.get('key2')); // value2hashTable.remove('key1'); console.log(hashTable.get('key1')); // undefined
**注释**
* 哈希表的底层存储是一个固定大小的数组。
* `put` 方法用于将键值对添加到哈希表中。
* `get` 方法用于从哈希表中获取一个给定键的值。
* `remove` 方法用于从哈希表中删除一个给定键的值。
* `_hash` 方法用于计算散列函数的结果。
**总结**
哈希表是一种常见的数据结构,用于快速查找、插入和删除元素。JavaScript 中哈希表的封装示例展示了如何使用哈希表实现缓存、计数器和集合等功能。示例代码提供了一个简单的哈希表实现,并演示了如何使用它进行基本操作。