当前位置:实例文章 » HTML/CSS实例» [文章]哈希表以及用js封装一个哈希表

哈希表以及用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 中哈希表的封装示例展示了如何使用哈希表实现缓存、计数器和集合等功能。示例代码提供了一个简单的哈希表实现,并演示了如何使用它进行基本操作。

其他信息

其他资源

Top