《深入理解ES6》之Set集合与Map集合

Set集合 

  Set类型是一种有序列表,其中含有一些相互独立的非重复,通过Set集合可以快速访问其中的数据,更有效地追踪各种离散值。

创建Set集合并添加元素

  调用new Set()创建Set集合,调用add()方法向集合添加元素,访问集合的size属性可以获取集合中目前的元素数量,访问has()方法可以检测Set集合中是否存在某个值。抵用delete()方法可以移除Set集合中的某一个元素,调用clear()方法会移除集合中的所有元素。

let set=new Set();
set.add(5);
set.add(‘5‘);
set.add(5);                

console.log(set.size);         //   2,Set有自动去
console.log(set.has(5));          // true    

set.delete(5);
console.log(set.has(5));           //false   

set.clear();
console.log(set.size);                //0    

Set集合的forEach()方法

  forEach()方法的回调函数接受以下3个参数:

1)Set集合中下一次索引的位置

2)与第一个参数一样的值

3)被遍历的Set集合本身

  let set=new Set([1,2]);
  set.forEach(function(value,key,ownerSet){
      console.log(key+‘‘+value);
      console.log(ownerSet===set);
      //1 1
      //true
      //2 2
      //true                                       

将Set集合转换成数组

  将数组转换为Set集合的过程很简单,只需给Set构造函数传入数组即可;将Set集合在转回数组的过程同样很简单,可以运用展开运算符(...)

 let set=new Set([1,2,3,3,4,5,6,6]),array=[...set];
 console.log(set);//[1,2,3,4,5,6]                             

WeakSet集合

  将对象存储在Set的实例与存储在变量中完全一样,只要Set实例中的引用存在,垃圾回收机制就不能释放该对象的内存空间,这是WeakSet集合可以解决问题。

  用WeakSet构造函数可以创建WeakSet集合,集合支持三种方法:add()、has()、delete()。

let set=new WeakSet(),
    key={};
set.add(key);
console.log(set.has(key));//true 

set.delete(key);
console.log(set.has(key));// false         

Set与WeakSet的区别

  • 在WeakSet的实例中,如果向add()、has()、delete()这三个方法传入非对象参数都会导致程序报错。
  • WeakSet集合不可迭代,所以不能被用于for-of循环。
  • WeakSet集合不暴露任何迭代器,所以无法通过程序本身来检测其中的内容。
  • WeakSet集合不支持forEach()方法
  • WeakSet集合不支持size属性。

如果只需要跟踪对象引用,优选WeakSet。

Map

  Map类型是一种储存着许多键值对的有序列表,其中的键名和对应的值支持所有的数据类型。

创建Map集合并添加元素

  添加新元素可以调用set()方法并分别传入键名和对应值作为两个参数;如果要从集合中获取信息,可以调用get()方法。

 let map =new Map();
 map.set("title","zhelishi");
 map.set("year",2017);                               

 console.log(map.get("title"));//‘zhelishi‘
 console.log(map.get("year"));//2017                 

Map集合支持的方法、初始化方法forEach()方法

  • has(key)检测指定的键名在Map集合中是否已经存在
  • delete(key)从集合中移除指定键名及其对应的值
  • clear()移除集合中所有的键值对
let map=new Map();
map.set("name","jiaxiaonuo");
map.set("age",24);
console.log(map.size);//2                               

console.log(map.has("name"));//true
console.log(map.has("age"));//true
console.log(map.get("name"));//"jiaxiaonuo"
console.log(map.get("age"));//24                        

map.delete("name");
console.log(map.has("name"));//false
console.log(map.get("name"));//undefined
console.log(map.size);//1                               

map.clear();
console.log(map.size);//0                               

  初始化Map集合

 let map=new Map([["name","jiaxiaonuo"],["age",24]]);
 console.log(map.has("name"));//true
 console.log(map.get("name"));//jiaxiaonuo
 console.log(map.size);//2                                       

  Map集合的forEach()方法接受三个参数:

  • Map集合中下一次索引的位置
  • 值对应的键名
  • Map集合本身
 let map=new Map([["name","jiaxiaonuo"],["age",24]]);
 map.forEach(function(value,key,owenMap){
     console.log(key+‘‘+value);
     console.log(owenMap===map);
     //name jiaxiaonuo
     //true
     //age 24
     //true
 })                                                       

WeakMpa集合

  该集合的最大用途是保存Web页面中的DOM元素。它是一种存储着许多键值对的无序列表,列表的键名必须是非null类型的对象,键名对应的值则可以是任意类型。通过set()方法添加数据,通过get()方法获取数据。

 let map=new WeakMap(),
    element=document.querySelector(".element");
 map.set(element,‘jiaxiaonuo‘);
 let value=map.get(element);
 console.log(value);                      //jiaxiaonuo
element.parent().removeChild(element);
element=null;      

  该集合支持has()、delete()方法

let map=new WeakMap(),
    element=document.querySelector(".element"
map.set(element,"jiaxiaonuo");               

console.log(map.has(element));    //true
console.log(map.get(element));   //jiaxiaonuo
map.delete(element);
console.log(map.has(element));  //false
console.log(map.get(element));//undefined    

  集合初始化

 let key1={},key2={},
     map=new Map([[key1,"hello"],[key2,"world"]]);
 console.log(map.has(key1)); //true
 console.log(map.get(key1)); //hello
 console.log(map.has(key2)); // true
 console.log(map.get(key2));//world
                                                                 

  当数据再也不可访问后集中存储的相关引用和数据都会被自动回收,这有效地避免了内存泄漏的问题,从而优化了内存的使用。相对Map集合而言,Weak Map集合对用户的可见度更低,气不支持通过forEach()方法、size属性及clear()方法来管理集合中的元素。

时间: 2024-10-13 08:01:36

《深入理解ES6》之Set集合与Map集合的相关文章

ES6中的Set和Map集合

前面的话 在ES6标准制定以前,由于可选的集合类型有限,数组使用的又是数值型索引,因而经常被用于创建队列和栈.如果需要使用非数值型索引,就会用非数组对象创建所需的数据结构,而这就是Set集合与Map集合的早期实现.本文将详细介绍ES6中的set和map集合 引入 Set集合是一种无重复元素的列表,开发者们一般不会逐一读取数组中的元素,也不太可能逐一访问Set集合中的每个元素,通常的做法是检测给定的值在某个集合中是否存在 Map集合内含多组键值对,集合中每个元素分别存放着可访问的键名和它对应的值,

java集合框架--Map集合

1.Map集合的概述 Map集合是将键映射到值的对象.一个映射不能包含重复的键.每个键最多只能映射到一个值. 2.Map接口和Collection接口的不同? Map集合存储元素是成对出现的,Collection集合存储元素是单独出现的. Map集合的键是唯一的,值是可重复的. Collection集合的子接口Set是唯一的,List是可重复的. Map集合的数据结构值针对键有效,和值无关,而Collection接口的数据结构是针对元素有效. 3.Map集合示例及功能 package cn; i

(1)集合 ---遍历map集合

Map接口     实现Map接口的类用来存储键(key)-值(value) 对.Map 接口的实现类有HashMap和TreeMap等.Map类中存储的键-值对通过键来标识,所以键值不能重复. HashMap: 线程不安全,效率高. 允许key或value为nullHashTable:线程安全,效率低. 不允许key或value为nullProperties : HashTable的子类,key和value都是string常用的方法: Object put(Object key, Object

java学习笔记—集合之Map集合

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 12.0px Times } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Songti SC" } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times } p.p4 { margin: 0.0px 0.0px 0.0px 0.0

java集合(List集合与Map集合的数据转换)

List集合与Map集合的数据转换 实现List和Map数据的转换. 具体要求如下: 功能1:定义方法public void listToMap( ){ }将List中Student元素封装到Map中 1)使用构造方法Student(int id,String name,int age,String sex )创建多个学生信息并加入List 2) 遍历List,输出每个Student信息 3) 将List中数据放入Map,使用Student的id属性作为key,使用Student对象信息作为va

Java基础知识强化之集合框架笔记50:Map集合之Map集合的概述和特点

1. Map集合的概述: 1 public interface Map<K,V> 作为学生来说,是根据学号来区分不同的学生的,那么假设我现在已经知道了学生的学号,我要根据学号去获取学生姓名,请问怎么做呢?如果采用前面讲解过的集合,我们只能把学号和学生姓名作为一个对象的成员,然后存储整个对象,将来遍历的时候,判断,获取对应的名称.但是呢,如果我都能把学生姓名拿出来了,我还需要根据编号去找吗?针对我们目前的这种需求:仅仅知道学号,就想知道学生姓名的情况,Java就提供了一种新的集合 Map.通过查

查询字符串中字母的个数(两种实现方式1,list与set集合 2,map集合)

题目: 取出一个字符串中字母出现的次数.如:字符串:"abcde%^kka27qoq" ,输出格式为:a(2)b(1)k(2)... 第一种方式(set和list结合使用): package itheima; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; /** * .取出一个字符串中字母出现的次数.如:字符串:"

Java基础知识强化之集合框架笔记52:Map集合之Map集合的遍历 键找值

1. Map集合的遍历  Map -- 夫妻对 思路:  A:把所有的丈夫给集中起来.  B:遍历丈夫的集合,获取得到每一个丈夫.  C:让丈夫去找自己的妻子.  转换:  A:获取所有的键  B:遍历键的集合,获取得到每一个键  C:根据键去找值 2. 代码示例: 1 package cn.itcast_01; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 import java.util.Set; 6 7 public cla

Java基础知识强化之集合框架笔记53:Map集合之Map集合的遍历 键值对对象找键和值

1. Map集合的遍历(键值对对象找键和值) Map -- 夫妻对  思路:  A: 获取所有结婚证的集合  B: 遍历结婚证的集合,得到每一个结婚证  C: 根据结婚证获取丈夫和妻子 转换:  A: 获取所有键值对对象的集合  B: 遍历键值对对象的集合,得到每一个键值对对象  C: 根据键值对对象获取键和值 2. 代码示例: 1 package cn.itcast_01; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 impo