Es6推出了
Set
、Map
等操作。分别对应于之前常用的Array
、Object
.
就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`);
输出结果如下:
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`);
输出结果如下:
从上面可以看出
- 添加元素的角度看,数组比
Set
快很多 - 获取某个元素的角度看,
Set
比数组快很多
那么,再添加元素的时候是遍历的?
应该不可能,因为如果是遍历的话,那么has
就不可能这么快,因为完全可以通过has
的方法去获取存在不存在,那么。之所以慢,应该就是构建Set
时,内部处理消耗了时间。而has
能够这么快,也是因为内部形成了映射。