一、set
1、定义:set是一种数据结构,类似于数组,但成员的值都是唯一的。
2、去除数组的重复成员:[...new set(array)]。
3、set实例的属性和方法
3.1、set.prototype.size 总数
3.2、set.prototype.add(value) 添加值,返回set本身
3.3、set.prototype.delete(value) 删除值,返回布尔值,表示删除是够成功
3.4、set.prototype.has(value) 返回布尔值,表示该值是否是set成员
3.5、set.prototype.clear() 清除所有成员,无返回值
4、Array.from方法可以将set结构转化为数组
例:const items = new Set([1,2,3,4,5])
const array = Array.from(items)
5、遍历
Set.prototype.keys() //返回键名的遍历器
Set.prototype.values() //返回键值的遍历器
Set.prototype.entries() //返回键值对的遍历器
//举例如下
let setData = new Set([1,2,3,5,8])
//该方法返回的值为
[1,1] [2,2] [3,3] [5,5] [8,8]
Set.prototype.forEach() //使用回调函数遍历每个成员
注:set查找某个值是否存在的时间复杂度为o(1)
数组的indexof方法的时间复杂度为o(n)
二、weakSet
1、weakset和set的异同点
相同点:weakSet和set结构类似,都是不重复的值的集合
不同点:1 )weakSet的成员只能是对象
2 )weakSet中的对象都是弱引用
注:set是强引用,weakSet是弱引用
强引用:如果一个对象具有强引用,那么垃圾回收机制绝不会回收它,当内存不足时,java虚拟机宁愿抛出outOfMemoryError错误,使程序异常终止。
//不会被回收 let obj = {}; let a = new Set(); a.add(obj); //弱化从而使GC可以回收 obj = null;
弱引用:垃圾回收机制不考虑weakSet对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收对象所占用的内存,不考虑对象还存在于weakSet中。
注:weakSet没有size属性,也没有clear方法,也不能遍历,因为成员都是弱引用,随时可能消失。