文章目录存储实现Set和Array的区别Set 对象是值的合集collection类似于数组但是集合set中的元素只会出现一次即集合中的元素是唯一的。规范要求集合的实现是“对合集中的元素的平均访问时间与集合中元素的数量呈次线性关系”。因此它可以在内部表示为哈希表查找的时间复杂度为 O(1)、搜索树查找的时间复杂度为 O(log(N))或任何其他的时间复杂度低于 O(N) 的数据结构。存储集合set中的元素只会出现一次即集合中的元素是唯一的。补充 值相等的判断规则 值的相等是基于零值相等算法的。将NaN视作是相等的在严格相等算法中NaN是不相同的 所以0和-0视为相同的 剩下所有其他的值是根据运算符的结果判断是否相等。实现实例属性和方法// 创建Setconstset1newSet([1,2,3]);// 方法// 1. add() 方法会在该集合中插入一个具有指定值的新元素如果该 Set 对象中没有具有相同值的元素set1.add(a);// 2. entries() 方法返回一个新的集合迭代器对象该对象包含了此集合中每个元素的 [value, value] 数组按插入顺序排列。constiterator1set1.entries();for(constentryofiterator1){console.log(entry);}/** * 输出 * [ 1, 1 ] [ 2, 2 ] [ 3, 3 ] [ a, a ] */// 3. forEach() 方法按插入顺序为该集合中的每个值执行一次提供的函数。set1.forEach((value1,value2,set){console.log(set1[${value1}] ${value2});});/** * 输出 * set1[1] 1 set1[2] 2 set1[3] 3 set1[a] a */// 4. has() 方法返回一个布尔值来指示对应的值是否存在于该集合中。比Array.indexOf()效率更高set1.has(a);// 5. values() 方法返回一个新的集合迭代器对象该对象包含此集合对象中每个元素的值按插入顺序排列。constiterator2set1.values();console.log(iterator2.next().value);/**输出1 */// 6. keys() 方法是 values() 方法的别名。constiterator3set1.keys();// 7. [Symbol.iterator]() 方法实现了可迭代协议以允许 Set 对象被大多数期望可迭代对象的语法所使用例如展开语法和 for...of 循环。constiterator4set1[Symbol.iterator]();console.log(iterator4.next().value);/**输出1 */// 8. delete() 方法从该集合中删除指定值如果该值在集合中。set1.delete(a);// 9. clear() 方法移除该集合中的所有元素。set1.clear();静态属性和方法// 静态属性// [Symbol.species] 属性返回默认构造函数即 Set 的构造函数。Set[Symbol.species];// 函数 Set()Set和Array的区别1. Set存储的是一种集合数据结构它类似于数组但是成员是唯一的不可重复。储存的元素是序列的也就是不能通过索引取值。是可迭代的可通过for of循环进行迭代。存储的元素是不可修改的。2. Array存储的数据是数组结构可重复。储存的元素是有序的可通过索引取值。元素是可修改和删除和可变长度。
Set数据结构
发布时间:2026/5/19 10:11:47
文章目录存储实现Set和Array的区别Set 对象是值的合集collection类似于数组但是集合set中的元素只会出现一次即集合中的元素是唯一的。规范要求集合的实现是“对合集中的元素的平均访问时间与集合中元素的数量呈次线性关系”。因此它可以在内部表示为哈希表查找的时间复杂度为 O(1)、搜索树查找的时间复杂度为 O(log(N))或任何其他的时间复杂度低于 O(N) 的数据结构。存储集合set中的元素只会出现一次即集合中的元素是唯一的。补充 值相等的判断规则 值的相等是基于零值相等算法的。将NaN视作是相等的在严格相等算法中NaN是不相同的 所以0和-0视为相同的 剩下所有其他的值是根据运算符的结果判断是否相等。实现实例属性和方法// 创建Setconstset1newSet([1,2,3]);// 方法// 1. add() 方法会在该集合中插入一个具有指定值的新元素如果该 Set 对象中没有具有相同值的元素set1.add(a);// 2. entries() 方法返回一个新的集合迭代器对象该对象包含了此集合中每个元素的 [value, value] 数组按插入顺序排列。constiterator1set1.entries();for(constentryofiterator1){console.log(entry);}/** * 输出 * [ 1, 1 ] [ 2, 2 ] [ 3, 3 ] [ a, a ] */// 3. forEach() 方法按插入顺序为该集合中的每个值执行一次提供的函数。set1.forEach((value1,value2,set){console.log(set1[${value1}] ${value2});});/** * 输出 * set1[1] 1 set1[2] 2 set1[3] 3 set1[a] a */// 4. has() 方法返回一个布尔值来指示对应的值是否存在于该集合中。比Array.indexOf()效率更高set1.has(a);// 5. values() 方法返回一个新的集合迭代器对象该对象包含此集合对象中每个元素的值按插入顺序排列。constiterator2set1.values();console.log(iterator2.next().value);/**输出1 */// 6. keys() 方法是 values() 方法的别名。constiterator3set1.keys();// 7. [Symbol.iterator]() 方法实现了可迭代协议以允许 Set 对象被大多数期望可迭代对象的语法所使用例如展开语法和 for...of 循环。constiterator4set1[Symbol.iterator]();console.log(iterator4.next().value);/**输出1 */// 8. delete() 方法从该集合中删除指定值如果该值在集合中。set1.delete(a);// 9. clear() 方法移除该集合中的所有元素。set1.clear();静态属性和方法// 静态属性// [Symbol.species] 属性返回默认构造函数即 Set 的构造函数。Set[Symbol.species];// 函数 Set()Set和Array的区别1. Set存储的是一种集合数据结构它类似于数组但是成员是唯一的不可重复。储存的元素是序列的也就是不能通过索引取值。是可迭代的可通过for of循环进行迭代。存储的元素是不可修改的。2. Array存储的数据是数组结构可重复。储存的元素是有序的可通过索引取值。元素是可修改和删除和可变长度。