当前位置:首页 > JavaScript

js set底层实现

2026-01-30 22:27:53JavaScript

JavaScript Set 的底层实现

JavaScript 的 Set 是一种集合数据结构,用于存储唯一值。其底层实现依赖于引擎(如 V8、SpiderMonkey 等),但通常基于哈希表或类似机制实现。

js set底层实现

哈希表实现原理

Set 的核心是通过哈希表存储唯一值。当添加一个值时,引擎会计算其哈希值,并在哈希表中检查是否已存在相同的值。如果哈希值冲突,会通过链表或其他冲突解决机制处理。

关键特性

  • 唯一性:通过哈希表确保每个值唯一,重复添加会被忽略。
  • 迭代顺序:插入顺序决定迭代顺序,这是 ECMAScript 规范的要求。
  • O(1) 时间复杂度:哈希表的设计使得添加、删除和查找操作的平均时间复杂度为 O(1)。

示例代码

const set = new Set();
set.add(1);
set.add(2);
set.add(1); // 重复值,被忽略
console.log(set.size); // 输出 2

性能优化

引擎可能对特定类型(如数字或字符串)进行优化。例如,V8 对小整数使用特殊存储方式以减少内存占用。

与其他语言对比

  • JavaHashSet 也是基于哈希表,但允许自定义哈希函数。
  • Pythonset 类似,但迭代顺序在早期版本中不固定(Python 3.7+ 后改为插入顺序)。

使用场景

  • 去重:快速去除数组中的重复项。
  • 成员检查:高效判断某个值是否存在。
  • 数学运算:实现并集、交集等集合操作。

注意事项

  • 对象引用Set 存储的是对象引用,两个不同对象即使内容相同也会被视为不同值。
  • NaN 处理Set 会将 NaN 视为相同的值,尽管 NaN !== NaN

js set底层实现

标签: 底层js
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promis…

vue数据代理底层实现

vue数据代理底层实现

Vue 数据代理的底层实现原理 Vue 的数据代理是通过 Object.defineProperty 或 Proxy(Vue 3)实现的,将数据对象的属性代理到 Vue 实例上,使得可以直接通过 th…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callbac…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Pa…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…