将数组转换为 Set 的时间复杂度 (Big-O)
Time complexity (Big-O) of converting an array to a Set
所以在 JS 中有多种方法可以将 Array
转换为 Set
。
Example #2 肯定是 O(n) 因为遍历数组的所有元素。 Example #1 的情况是否相同?还是JS在后台给我们做了一些优化?
如果是,使用示例 #1 有什么缺点吗?
示例 1
const arr = [ 1, 3, 2, 3, 5 ];
const set = new Set(arr);
console.log(set);
/*
Output: Set { 1, 3, 2, 5 }
*/
示例 2
const arr = [ 1, 3, 2, 3, 5 ];
const set = new Set();
arr.map(item => set.add(item));
console.log(set);
/*
Output: Set { 1, 3, 2, 5 }
*/
还是O(n)
; JS 没有神奇的方法可以将所有 n
元素放入 Set
而无需实际遍历所有 n
元素。低于 O(n)
的唯一方法是跳过某些元素,如果必须考虑将所有元素包含在 Set
.
中,这显然是不可能的
所以在 JS 中有多种方法可以将 Array
转换为 Set
。
Example #2 肯定是 O(n) 因为遍历数组的所有元素。 Example #1 的情况是否相同?还是JS在后台给我们做了一些优化?
如果是,使用示例 #1 有什么缺点吗?
示例 1
const arr = [ 1, 3, 2, 3, 5 ];
const set = new Set(arr);
console.log(set);
/*
Output: Set { 1, 3, 2, 5 }
*/
示例 2
const arr = [ 1, 3, 2, 3, 5 ];
const set = new Set();
arr.map(item => set.add(item));
console.log(set);
/*
Output: Set { 1, 3, 2, 5 }
*/
还是O(n)
; JS 没有神奇的方法可以将所有 n
元素放入 Set
而无需实际遍历所有 n
元素。低于 O(n)
的唯一方法是跳过某些元素,如果必须考虑将所有元素包含在 Set
.