本文共 3827 字,大约阅读时间需要 12 分钟。
如需转载, 请咨询作者, 并且注明出处.
有任何问题, 可以关注我的微博: , 或者添加我的微信: 372623326
几乎每种编程语言中, 都有集合结构.
集合比较常见的实现方式时哈希表(后续会学习), 我们这里来实现一个封装的集合类.
我们先来简单认识一下集合的特点.
集合的特点
集合的实现
像前面封装其他数据类型一样, 我们也来封装一下集合类(Set类)
创建集合类
我们先来封装一个Set类
// 封装集合的构造函数function Set() { // 使用一个对象来保存集合的元素 this.items = {} // 集合的操作方法}
代码解析:
操作的方法
集合有哪些常见的操作方法呢?
add(value)
:向集合添加一个新的项。remove(value)
:从集合移除一个值。has(value)
:如果值在集合中,返回true
,否则返回false
。clear()
:移除集合中的所有项。size()
:返回集合所包含元素的数量。与数组的length属性类似。values()
:返回一个包含集合中所有值的数组。我们来一个个实现这些方法, 相对都比较简单.
has(value)
方法
// 判断集合中是否有某个元素Set.prototype.has = function (value) { return this.items.hasOwnProperty(value)}
add
方法
// 向集合中添加元素Set.prototype.add = function (value) { // 1.判断集合中是否已经包含了该元素 if (this.has(value)) return false // 2.将元素添加到集合中 this.items[value] = value return true}
remove
方法
// 从集合中删除某个元素Set.prototype.remove = function (value) { // 1.判断集合中是否包含该元素 if (!this.has(value)) return false // 2.包含该元素, 那么将元素删除 delete this.items[value] return true}
clear
方法
// 清空集合中所有的元素Set.prototype.clear = function () { this.items = {}}
size
方法
// 获取集合的大小Set.prototype.size = function () { return Object.keys(this.items).length /* 考虑兼容性问题, 使用下面的代码 var count = 0 for (var value in this.items) { if (this.items.hasOwnProperty(value)) { count++ } } return count */}
values
方法
// 获取集合中所有的值Set.prototype.values = function () { return Object.keys(this.items) /* 考虑兼容性问题, 使用下面的代码 var keys = [] for (var value in this.items) { keys.push(value) } return keys */}
集合的使用
我们来简单使用和测试一下封装的集合类
// 测试和使用集合类var set = new Set()// 添加元素set.add(1)alert(set.values()) // 1set.add(1)alert(set.values()) // 1set.add(100)set.add(200)alert(set.values()) // 1,100,200// 判断是否包含元素alert(set.has(100)) // true// 删除元素set.remove(100)alert(set.values()) // 1, 200// 获取集合的大小alert(set.size()) // 2set.clear()alert(set.size()) // 0
最后, 我们还是给出集合的完整代码
完整代码
// 封装集合的构造函数function Set() { // 使用一个对象来保存集合的元素 this.items = {} // 集合的操作方法 // 判断集合中是否有某个元素 Set.prototype.has = function (value) { return this.items.hasOwnProperty(value) } // 向集合中添加元素 Set.prototype.add = function (value) { // 1.判断集合中是否已经包含了该元素 if (this.has(value)) return false // 2.将元素添加到集合中 this.items[value] = value return true } // 从集合中删除某个元素 Set.prototype.remove = function (value) { // 1.判断集合中是否包含该元素 if (!this.has(value)) return false // 2.包含该元素, 那么将元素删除 delete this.items[value] return true } // 清空集合中所有的元素 Set.prototype.clear = function () { this.items = {} } // 获取集合的大小 Set.prototype.size = function () { return Object.keys(this.items).length /* 考虑兼容性问题, 使用下面的代码 var count = 0 for (var value in this.items) { if (this.items.hasOwnProperty(value)) { count++ } } return count */ } // 获取集合中所有的值 Set.prototype.values = function () { return Object.keys(this.items) /* 考虑兼容性问题, 使用下面的代码 var keys = [] for (var value in this.items) { keys.push(value) } return keys */ }}