数据结构之“集合”

  • 集合是什么?
  • LeetCode:349.两个数组的交集
  • 前端与集合:使用ES6的Set
  • 思考题

集合是什么?

一种无序且唯一的数据结构
ES6中有集合,名为Set
集合的常用操作:去重、判断某元素是否在集合中、求交集

// 去重
const arr = [1, 1, 2, 2];
const arr2 = [...new Set(arr)];// 判断元素是否在集合中
const set = new Set(arr);
const has = set.has(3);// 求交集
const set2 = new Set([2, 3]);
const set3 = new Set([...set].filter(item => set2.has(item)));

LeetCode:349.两个数组的交集

输入:nums1 = [1,2,2,1],nums2 = [2,2]
输出:[2]

解题思路
求交集且无序唯一
使用集合
解题步骤
用集合对nums1去重
遍历nums1,帅选出nums2中包含的值

时间复杂度O(m * n),空间复杂度O(m)
m是去重后nums1的长度,n是nums2的长度
nums1和nums2都是已有的存储,额外临时的存储是num1去重后的长度

前端与集合:使用ES6的Set

Set操作
使用Set对象:new、add、delete、has、size
迭代Set:多种迭代方法、Set与Array互转、求交集/差集

let mySet = new Set();//newmySet.add(1);//add
mySet.add(5);
mySet.add(5);//因为唯一性,mySet只会有一个5
mySet.add('some text');
let o = { a: 1, b: 2 };
mySet.add(o);
mySet.add({ a: 1, b: 2 });//存储地址不一样,会被添加const has = mySet.has(o);//has
//size为5
mySet.delete(5);//delete
//size为4//多种迭代方法
for(let item of mySet) console.log(item);
for(let item of mySet.keys()) console.log(item);
for(let item of mySet.values()) console.log(item);
for(let [key, value] of mySet.entries()) console.log(key, value);//key和value一样//Set > Array
const myArr = [...mySet];
const myArr = Array.from(mySet);//Array > Set
const mySet2 = new Set([1,2,3,4]);//求交集(mySet和mySet2中都有的)
const intersection = new Set([...mySet].filter(x => mySet2.has(x)));
//求差集(mySet中有,mySet2中没有的)
const difference = new Set([...mySet].filter(x => !mySet2.has(x)));

思考题

1、在你的实际工作中使用集合完成一次去重操作
2、了解数据库中的 join 操作符吗?inner join 属于集合中的哪个操作?

(六)数据结构之“集合”相关推荐

  1. 《码出高效:java开发手册》六-数据结构与集合(一)

    前言 本章主要是讲数据结构与集合,这章内容涉及到非常基础的知识,内容相对较多,首先从数组讲起,引申到集合框架,之后再到集合源码,最后介绍了高并发集合框架 集合 集合在代码中是collection,对应 ...

  2. 《码出高效:java开发手册》六-数据结构与集合(二)

    前言 接上篇,第六章第二部分,上篇讲到了红黑树的FixAfterInsertion方法,这个方法原理与fixAfterDelete类似,只讲这个添加时的调整方法 红黑树 代码可以看到,调整后的根节点一 ...

  3. 学习javascript数据结构(三)——集合

    前言 总括: 本文讲解了数据结构中的[集合]概念,并使用javascript实现了集合. 原文博客地址:学习javascript数据结构(三)--集合 知乎专栏&&简书专题:前端进击者 ...

  4. Redis-07Redis数据结构--有序集合ZSet

    文章目录 概述 有序集合的数据结构 Redis 有序集合的部分命令 spring-data-redis 对有序集合的封装 使用 Spring 操作有序集合 注意 代码 概述 有序集合和集合类似,只是说 ...

  5. Redis数据结构之集合

    本文来说下Redis数据结构之集合 文章目录 概述 常用集合命令 相关命令 集合内的操作命令 集合间的操作命令 内部编码 intset(整数集合) hashtable(哈希表) 具体示例 应用场景 用 ...

  6. Clojure学习03:数据结构(集合)

    Clojure提供了几种强大的数据结构(集合) 一.集合种类 1.vector 相当于数组,如: [2  3   5]  ,  ["ad"  "adas"  & ...

  7. 「Redis数据结构」集合对象(Set)

    「Redis数据结构」集合对象(Set) 文章目录 「Redis数据结构」集合对象(Set) 一.概述 二.结构 三.编码转换 四.小结 一.概述 Set是Redis中的单列集合,其特点为不保证有序性 ...

  8. 《学习javascript数据结构与算法》——第六章:集合

    集合无序,元素唯一,以[值,值]的形式存储元素 创建集合 function Set() {var items = {};/*判断值是否在集合中*/this.has = function(value) ...

  9. 三十六、Java集合中的HashMap

    @Author:Runsen @Date:2020/6/3 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

最新文章

  1. MFC Map 许多警告
  2. PHP-Socket服务端客户端发送接收通信实例详解
  3. 【小白学习C++ 教程】二、C++基础语法、注释和变量
  4. Script 入门实践
  5. Java NIO学习篇之NIO的基本认识
  6. EOS Nation更新“flash.sx遭攻击”进展:将建议MSIG根据快照将资金退还
  7. 分析设计数据库,优化Java程序
  8. HDU 4553:约会安排(区间合并)
  9. 11. Window open() 方法
  10. linux中子进程继承了父进程的什么意思,子进程从父进程处继承的文件描述符是什么东西...
  11. LCD1602显示中文汉字
  12. 【前后端异常】http/https post请求 返回415错误状态码的解决方法
  13. allegro铜皮优先级设置
  14. 人脸识别系统技术方案
  15. Unity Shader PostProcessing - 8 - Bloom 泛光
  16. 有一些C++基础的同学们如何喝下你的第一杯咖啡?
  17. 不用下载软件,免费将PDF文件缩小的方法分享
  18. 彻底清除SMSS.EXE病毒
  19. Zlib库的使用实现对zip文件的解压缩
  20. rsync实现两台服务器上的实时同步

热门文章

  1. Python实现多行数据读入
  2. 解决 - java.lang.OutOfMemoryError: unable to create new native thread
  3. LRU缓存实现(Java)
  4. java return
  5. 实力封装:Unity打包AssetBundle(二)
  6. python--列表与字典
  7. 排序(选择,冒泡,直接插入,希尔排序)
  8. ExecutorCompletionService分析及使用
  9. ASP.NET MVC过滤器
  10. 系统间数据交互注意项