第6章:集合

集合简介

  1. 一种无序且唯一的数据结构。不关心顺序,集合里面的元素都是唯一的。
    栈,队列,链表他们里面都有可能出现重复的数据,但是集合里面的元素是唯一的。
    栈,队列,链表它们都有自己的顺序,但是集合是无序的。

  2. Es6中新增了集合:名为Set

  3. 集合的常用操作:去重复,判断某元素是否在集合中,求交集(几个集合里面都存在的元素)

  4. 对set数据结构,key和value是一样的。

// 1.去重复
const arr = [1,2,1,2]
const arrNew = [...new Set(arr)]

// new Set(arr): 去重复,把去重复的数据放在一个数组里面[...new Set(arr)]
console.log(arrNew) // [1,2]


// 2.判断某元素是否在集合中(直接使用set的has方法)
const set = new Set(arr)
const has = set.has(1) // true

// 3.求交集(set没有提供直接求交集的方法,那么我们直接把set转换成数组,利用数组的filter方法)
const set1 = {1,2}
const set2 = {2, 3}
const set22 = [...set2]
const set3 = set22.filter(item => set1.has(item))
console.log(set3) // 2

leetCode: 349两个数组的交集

题目:给2个数组,求交集。请添加图片描述

const intersection = function(nums1, nums2) {
	// return [...new Set(num1)].filter(n => new Set(nums2).has(n))
	return [...new Set(num1)].filter(n => nums2.includes(n))
}

时间复杂度:O(n ^ 2)
空间复杂度:O(n)

使用Es6中的Set操作

  1. 使用Set对象:new,add,delete, has, size
  2. 迭代Set:多种迭代方法,Set与Array互转,求交集/差集

add

let mySet = new Set()

// 字符串
mySet.add('1')
mySet.add('5')
mySet.add('5')

// 数字
mySet.add(1)
mySet.add(5)
console.log(mySet) // {"1", "5", 1, 5}

// 对象 添加对象的时候,两次都生效,因为对象看起来是一个东西,但是两个对象在内存中存储的位置不一样,所以从本质上来说是2个不同的对象
mySet.add({a: "1", b: "2"})
mySet.add({a: "1", b: "2"}) // 第二次也能添加成功

console.log(mySet) // {"1", "5", 1, 5, {a: "1", b: "2"}, {a: "1", b: "2"}}

has

let mySet = new Set()

// 字符串
mySet.add('1')

mySet.has('1') // true
mySet.has(1) // false

delete

let mySet = new Set()

// 字符串
mySet.add('1')

mySet.delete('1') // true
console.log(mySet) // {size: 0}
mySet.size // 0

for of

// 方法1遍历:
let mySet = new Set()
mySet.add('4')
mySet.add('0')
mySet.add('6')
for (let item of mySet) {
	console.log(item) // 4   0   6
}


// 方法2遍历:
let mySet = new Set()
mySet.add('4')
mySet.add('5')
mySet.add('6')
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, array) // 返回键值对
}

set转array

let mySet = new Set()
mySet.add('4')
mySet.add('5')
mySet.add('6')

转换为array
Array.form(mySet)

array转为set

const arr = [1,2,4]
new Set(arr)

求交集

let mySet = new Set()
mySet.add(2)
mySet.add('5')
const mySet2 = new Set([2,3])
const intersection = new Set([...mySet].filter(x => mySet2.has(x)))

求差集(在mySet中存在,但是mySet2不存在)

let mySet = new Set()
mySet.add(2)
mySet.add('5')
const mySet2 = new Set([2,3])
const difference = new Set([...mySet].filter(x => !mySet2.has(x)))

总结

技术要点:

  1. 一种无序且唯一的数据结构。不关心顺序,集合里面的元素都是唯一的。
    栈,队列,链表他们里面都有可能出现重复的数据,但是集合里面的元素是唯一的。
    栈,队列,链表它们都有自己的顺序,但是集合是无序的。

  2. Es6中新增了集合:名为Set

  3. 集合的常用操作:去重复,判断某元素是否在集合中,求交集(几个集合里面都存在的元素)

  4. 对set数据结构,key和value是一样的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值