学习js数据结构与算法-集合(1)

144 阅读2分钟

这是我参与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,添加一个元素的时候,需要把它同时作为健和值保存,因为这样有利于查找该元素。