几乎每种编程语言中都会默认提供集合结构,集合结构比较常见的实现方式是哈希表(后续会学习),由于还没有学习到哈希表,我们这里暂且用jJs中的对象来封装一个集合类,集合通常是一组无序的,不能重复的元素构成,和数学中的集合名词比较相近,但是数学中的集合范围更大一些,也允许集合中的元素重复,而在数据结构集合中的元素是不允许重复的,集合可以看成一个特殊的数组,其特殊之处在于元素没有顺序,也不能重复,没有顺序意味着不能通过下标值访问,不能重复意味着相同的对对象在集合中只能存在一份,我们这里学习集合还是跟之前以一样,封装一个集合类(实际上在新版本的es6中已经默认提供了集合类Set,但是我们这里为了了解集合内部的实现机制,还是自己来封装一个Set类)
集合类的实现
// 封装集合类
let _Set = (function() {
// 内部使用对象进行实现
let items = {};
return class {
// 增
add(value) {
// 判断是否存在
if (this.has(value)) return false;
items[value] = value;
return true;
}
// 删
remove(value) {
if (!this.has(value)) return false;
delete items[value];
return true;
}
// 返回内容
values() {
return Object.values(items);
}
// 判断是否存在
has(value) {
return items.hasOwnProperty(value);
}
// 清空
clear() {
items = {};
}
// 计算大小
size() {
return Object.keys(items).length;
}
};
})();
// 实例化
let cs = new _Set();