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

