这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战」。
我个人觉得要想进大厂,就必须学习了解算法和数据结构,经历了多次面试之后,也知道了算法和数据结构的重要性,所以,我也打算从今天开始,进入学习,下载了一下电子书,边看书,边跟着书的例子来敲一下代码,下面就开始总结一下对算法和数据结构的学习吧。
第十八天:学习集合
集合
集合是一种不允许重复的顺序数据结构,是由一组无序且唯一的项组成的。该数据结构使用了与有限集合相同的数学概念。
es6介绍了Set类是js api的一部分,我们将基于es6的Set类来实现我们自己的Set类。同时也会实现一些原生es6没有提供的集合运算,例如并集、交集和差集。
创建集合类
class Set {
constructor() {
this.items = {}
}
}
这里我们使用对象实现而不是使用数组。不过也可以用数组实现。
集合需要的方法
-
add(element):向集合添加一个新元素。
-
delete(element):从集合移除一个元素。
-
has(element):如果元素在集合中,就返回true,否则false
-
clear():移除集合中的所有元素。
-
size():返回集合所包含元素的数量。
-
values():返回一个包含集合中所有值的数组
-
has(element)
首先实现的是has这个方法。因为它会呗add、delete等其他方法调用。
has(element) { element in this.items }既然我们使用了对象来存储集合的元素,就可以用js的in运算符来验证给定元素是否是this.items对象的属性。
但还有更好的实现方式:
has(element) { return Object.prototype.hasOwnProperty.call(this.items, element) }- add(element)
接下来实现的是add
add(element) { if(!this.has(element)) { this.items[element] = element return true } return false }如果不存在该元素的时候才进行添加,然后添加了的话返回true,否值返回false,添加一个元素的时候,需要把它同时作为健和值保存,因为这样有利于查找该元素。