zoukankan      html  css  js  c++  java
  • ES6,新增数据结构WeakSet的用法

    WeakSet和Set类似,同样是元素不重复的集合,它们的区别是WeakSet内的元素必须是对象,不能是其它类型。

    特性:

    1.元素必须是对象。

    添加一个number类型的元素。

    const ws = new WeakSet()
    ws.add(1)

    结果是报类型错误。

    TypeError: Invalid value used in weak set

    添加一个对象。

    const ws = new WeakSet()
    var a = {p1:'1', p2:'2'}
    ws.add(a)
    console.log(ws.has(a));

    添加OK,结果显示:

    true

    可以通过WeakSet的has方法判断一个元素是否已在集合中。

    如果不需要存储元素时,可以使用delete方法删除元素。

    2.弱引用,不被计入垃圾回收

    添加进WeakSet的元素对象,WeakSet不会对元素对像的引用计数加1,对于被添加进WeakSet的元素对象,只要该元素对象没有被除WeakSet以外的其他对象引用,就会被垃圾回收释放,在WeakSet中的该元素对象自动被释放,不会出现内存泄漏。

    因为这一特性,其性能要比map要高,对于存储无顺序要求的,不重复的,临时存储的场景,可以使用它。

    const ws = new WeakSet()
    var a = {p1:'1', p2:'2'}
    
    ws.add(a)
    a = null
    console.log(ws.has(a));

    先将对象添加到WeakSet中,然后将对象设成null,然后再下面的has方法判定时,结果显示,表示WeakSet中已经不存在该对象。

    false

    3.不能遍历

    因为其对内部的元素对象是弱引用,随时会被垃圾回收释放掉,所以其不支持size和forEach等遍历方法。

    End

  • 相关阅读:
    01背包----简单DP
    小a的计算器
    BZOJ3160 万径人踪灭 【fft + manacher】
    BZOJ3527 [Zjoi2014]力 【fft】
    BZOJ2194 快速傅立叶之二 【fft】
    BZOJ2123 [Sdoi2013]森林 【主席树 + 启发式合并】
    BZOJ3720 Gty的妹子树 【树分块】
    洛谷P1822 魔法指纹 【分块打表】
    洛谷3396 哈希冲突 【分块】
    分块算法
  • 原文地址:https://www.cnblogs.com/kongxianghai/p/7291993.html
Copyright © 2011-2022 走看看