es6 Set 的遍历、性能

Es6推出了SetMap等操作。分别对应于之前常用的ArrayObject.

Set而言,与Array最大的不同在于Set的数据是不能够有重复的。那么他们的性能到底如何呢。可以进行一个比较
Array

let s = []
for(let i = 0; i < 10000 * 1000;i++) {
    s.push(i);
};
let begin = new Date().getTime();
s.push(10000 * 10000 - 1);
let end = new Date().getTime();
console.log(`添加消耗${end-begin}ms`);
begin = new Date().getTime();
s.indexOf(10000 * 10000 - 1);
end = new Date().getTime();
console.log(`判断消耗${end-begin}ms`);

输出结果如下:

image.png

Set

let s = new Set();
let begin = new Date().getTime();
for(let i = 0; i < 10000 * 1000;i++) {
    s.add(i);
};
let end = new Date().getTime();
console.log(`消耗${end-begin}ms`);
begin = new Date().getTime();
s.add(10000 * 10000 - 1);
end = new Date().getTime();
console.log(`添加消耗${end-begin}ms`);
begin = new Date().getTime();
s.has(10000 * 10000 - 1);
end = new Date().getTime();
console.log(`判断消耗${end-begin}ms`);

输出结果如下:


image.png

从上面可以看出

  1. 添加元素的角度看,数组比Set快很多
  2. 获取某个元素的角度看,Set比数组快很多

那么,再添加元素的时候是遍历的?
应该不可能,因为如果是遍历的话,那么has就不可能这么快,因为完全可以通过has的方法去获取存在不存在,那么。之所以慢,应该就是构建Set时,内部处理消耗了时间。而has能够这么快,也是因为内部形成了映射。

你可能感兴趣的:(es6 Set 的遍历、性能)