数据结构Set和Map

一、数据结构 Set

集合的基本概念:集合是由一组无序且唯一(即不能重复)的项组成的。这个数据结构使用了与有限集合相同的数学概念,应用在计算机的数据结构中。  特点:key 和 value 相同,没有重复的 value。ES6 提供了数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

1、 如何创建一个 Set

const s = new Set([1, 2, 3]);

2、属性

console.log(s.size); // 3

3、Set 类的方法

--set.add(value) 添加一个数据,返回Set结构本身。

s.add(‘a‘).add(‘b‘).add(‘c‘);

--set.delete(value) 删除指定数据,返回一个布尔值,表示删除是否成功。

console.log(s.delete(‘a‘));

--set.has(value) 判断该值是否为Set的成员,反回一个布尔值。

 --set.clear() 清除所有数据,没有返回值。

--keys() 返回键名的遍历器

--values() 返回键值的遍历器

--entries() 返回键值对的遍历器

--forEach() 使用回调函数遍历每个成员

4、用途

--数组去重

[...new Set(array)]

二、数据结构 Map

字典:是用来存储不重复key的Hash结构。不同于集合(Set)的是,字典使用的是[键,值]的形式来储存数据的。 JavaScript 的对象(Object:{})只能用字符串当作键。这给它的使用带来了很大的限制。 为了解决这个问题,ES6提供了Map数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种更完善的Hash结构实现。如果你需要“键值对”的数据结构,Map比Object更合适。

1 、如何创建一个 Map

const map = new Map([
  [‘a‘, 1],
  [‘b‘, 2]
]);

console.log(map);

2、 Map 类的属性

console.log(map.size);

3、Map 类的方法

--set(key, value) 设置键名key对应的键值为value,然后返回整个 Map 结构。如果key已经有值,则键值会被更新,否则就新生成该键。

map.set(‘hello‘, ‘wolrd‘).set(‘new‘, ‘fq‘).set(‘share‘, ‘jay‘);

--get(key) get方法读取key对应的键值,如果找不到 key,返回undefined。

console.log(map.get(‘new‘));

-- delete(key) 删除某个键,返回true。如果删除失败,返回false。

console.log(map.delete(‘a‘));

--has(key) 方法返回一个布尔值,表示某个键是否在当前Map对象之中。

console.log(map.has(‘miaov‘));

-- clear() 清除所有数据,没有返回值。

 map.clear();

--  keys() 返回键名的遍历器

console.log(map.keys());

-- values() 返回键值的遍历器

console.log(map.values());

-- entries() 返回键值对的遍历器

 console.log(map.entries());

-- forEach() 使用回调函数遍历每个成员

 map.forEach(function (key, value, map){
   console.log(key + ‘:‘ + value);
 })

  

时间: 2024-10-12 21:59:04

数据结构Set和Map的相关文章

高并发下的Java数据结构(List,Set,Map,Queue)

由于并行程序与串行程序的不同特点,适用于串行程序的一些数据结构可能无法直接在并发环境下正常工作,这是因为这些数据结构不是线程安全的.本节将着重介绍一些可以用于多线程环境的数据结构,如并发List.并发Set.并发Map等. 1.并发List Vector 或者 CopyOnWriteArrayList 是两个线程安全的List实现,ArrayList 不是线程安全的.因此,应该尽量避免在多线程环境中使用ArrayList.如果因为某些原因必须使用的,则需要使用Collections.synchr

javascript新增加的数据结构: Set Map WeakSet WeakMap

一.Set ES6提供新的数据结构Set,类似于Array,不过Array中的值可以重复,但是Set中的值不可以重复 声明: Set函数是一个构造函数 let set = new Set([1,2,3,2]) console.log((new Set([1,2,3,2])).size) // 3 console.log((new Set([NaN, NaN])).size) // 1 console.log((new Set([{}, {}])).size) // 2 console.log((

数据结构---Set和Map

1.Set数据结构 Set本质上是一个没有重复数据的一种集合.Set本身也是一种数据结构的构造函数. 1.Set的初始化 var obj = new Set(参数): 上面生成一个Set的实例,obj是集合对象. 参数可以是数组,也可以是类数组(具有iterator接口的数据,如字符串) var obj = [...new Set([1,3,3,3])]; // [1,3] var obj = [...new Set('hellohello')]; // ['h','e','l','o'].jo

Map 和 WeakMap 数据结构

Map 和 WeakMap 是ES6 新增的数据结构 一.Map 它们本质与对象一样,都是键值对的集合,但是他们与 Object 对象主要的不同是,键可以是各种类型的数值,而Object 对象的键 只能是字符串类型或者Symbol类型值,Map 和 WeakMap 是更为完善的Hash结构. 1.对象 和 Map //----------- 对象 -------------- var keyObj = {} var dataObj = {} dataObj[keyObj] = '大家好' 虽然表

js ES6 Set和Map数据结构详解

这篇文章主要介绍了ES6学习笔记之Set和Map数据结构,结合实例形式详细分析了ECMAScript中基本数据结构Set和Map的常用属性与方法的功能.用法及相关注意事项,需要的朋友可以参考下 本文实例讲述了ES6学习笔记之Set和Map数据结构.分享给大家供大家参考,具体如下: 一.Set ES6提供了新的数据结构Set.类似于数组,只不过其成员值都是唯一的,没有重复的值. Set本身是一个构造函数,用来生成Set数据结构. 1 . Set函数可以接受一个数组(或类似数组的对象)作为参数,用来

10.Set 和 Map 数据结构

Set 和 Map 数据结构 Set 和 Map 数据结构 Set 基本用法 ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. const s = new Set(); [2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x)); for (let i of s) { console.log(i); } // 2 3 5 4 上面代码通过add方法向 Set 结构加入成

es6的Set和Map数据结构

Set 和 Map 数据结构 Set WeakSet Map WeakMap Set § ? 基本用法 ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. const s = new Set(); [2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x)); for (let i of s) { console.log(i); } // 2 3 5 4 上面代码通过add

ES6 第十四节 map数据结构

ES6 第十四节 map数据结构 目录 ES6 第十四节 map数据结构 第十四节 map数据结构 Json和map格式的对比 map的增删查 取值get 删除delete 删除delete的特定值: size属性 查找是否存在has 清除所有元素clear 第十四节 map数据结构 在一些构建工具中是非常喜欢使用map这种数据结构来进行配置的,因为map是一种灵活,简单的适合一对一查找的数据结构. Json和map格式的对比 map的效率和灵活性更好 先来写一个JSON,这里我们用对象进行模拟

Go 多线程使用Map

最近的项目中用到了GO自带的Map用于存储临时数据,且此Map只增加不删除,主要有两个线程会对其操作.临时数据结构如下 Var Map map[string]UsrStuLock 1:线程一周期性的遍历此Map,并有可能修改其值 2:线程二随机时间被调用,并向Map中增加数据 因为涉及多线程,所以需要配合锁.对线程一和线程二的优先级进行讨论 情况一:如果线程二的优先级没有线程一高,那么处理方式如下: 线程一: 加锁 遍历处理 解锁 线程二: 加锁 添加元素 解锁 那么在Map元素数量较多时,就有