js实现hashset
实现 HashSet 的基本结构
使用 JavaScript 的 Object 或 Map 作为底层存储结构。Object 的键是字符串,而 Map 支持任意类型的键。
class HashSet {
constructor() {
this.items = {};
// 或使用 Map
// this.items = new Map();
}
}
添加元素
使用对象的属性或 Map 的 set 方法添加元素。注意处理键的类型转换。
add(value) {
this.items[value] = true;
// 或使用 Map
// this.items.set(value, true);
}
检查元素是否存在
通过检查对象的属性或 Map 的 has 方法来判断元素是否存在。

has(value) {
return this.items[value] === true;
// 或使用 Map
// return this.items.has(value);
}
删除元素
使用 delete 操作符删除对象的属性,或 Map 的 delete 方法移除元素。
delete(value) {
if (this.has(value)) {
delete this.items[value];
// 或使用 Map
// this.items.delete(value);
return true;
}
return false;
}
获取集合大小
通过 Object.keys 或 Map 的 size 属性获取集合中元素的数量。

size() {
return Object.keys(this.items).length;
// 或使用 Map
// return this.items.size;
}
清空集合
直接将底层存储结构重置为空对象或清空 Map。
clear() {
this.items = {};
// 或使用 Map
// this.items.clear();
}
完整实现示例
以下是使用 Object 实现的完整 HashSet 类:
class HashSet {
constructor() {
this.items = {};
}
add(value) {
this.items[value] = true;
}
has(value) {
return this.items[value] === true;
}
delete(value) {
if (this.has(value)) {
delete this.items[value];
return true;
}
return false;
}
size() {
return Object.keys(this.items).length;
}
clear() {
this.items = {};
}
}
使用示例
const set = new HashSet();
set.add(1);
set.add(2);
console.log(set.has(1)); // true
console.log(set.size()); // 2
set.delete(1);
console.log(set.has(1)); // false
set.clear();
console.log(set.size()); // 0
注意事项
- 使用
Object作为存储时,所有键会被转换为字符串。例如set.add(1)和set.add("1")会视为同一个键。 - 如果需要支持任意类型的键(包括对象),应使用
Map作为底层存储。 Map的性能在某些场景下优于Object,尤其是在频繁添加和删除键值对的场景。






