set.delete()时间复杂度为o(1),传入待删值,存在则移除并返回true,否则返回false;原始值需严格相等,对象须同一引用,nan可正确删除。

Set 的 delete 方法删除元素非常快,时间复杂度是 O(1),只要传入要删的值即可,无需遍历或查找索引。
delete 方法的基本用法
Set.delete() 接收一个参数:待删除的元素值。它会检查集合中是否存在该值(基于 SameValueZero 比较规则),存在则移除并返回 true;不存在则不操作并返回 false。
- 删除数字、字符串、布尔值等原始值时,值必须完全相等
- 删除对象或函数时,必须传入同一个引用,不是“看起来一样”的新对象
- NaN 可以被正确删除(Set 中 NaN 只算一个值)
常见误用与注意事项
容易出错的地方集中在引用类型和特殊值上:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
对象不能靠“内容相同”删除:即使两个对象字面量一模一样,
set.delete({a: 1})也删不掉之前添加的{a: 1},因为引用不同 -
数组同理:添加了
[1, 2],再用set.delete([1, 2])无效 - null 和 undefined 可正常删除,它们在 Set 中是独立存在的成员
- 删除后调用
set.size或遍历可验证是否成功
高效删除多个元素的小技巧
Set 本身不支持批量 delete,但可以结合其他方法实现高效清理:
- 对已知多个要删的值,用循环逐个调用
delete()—— 仍是 O(n) 总体,但每个操作都是 O(1) - 想删满足条件的一批元素?用
for...of配合delete(),注意不要边遍历边删导致跳过(推荐先收集待删项,再统一删) - 更简洁的方式:用
Array.from(set).filter(...)构建新 Set,适合条件复杂或删除量大的场景(但会新建结构,非原地修改)
实用示例对比
以下代码展示正确与错误的删除方式:
const s = new Set([1, 'hello', {x: 1}, null]);
s.delete(1); // ✅ true,数字 1 被删
s.delete('hello'); // ✅ true
s.delete(null); // ✅ true
const obj = {x: 1};
s.add(obj);
s.delete(obj); // ✅ true —— 用的是同一个引用
s.delete({x: 1}); // ❌ false —— 新对象,引用不同
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










