此数据结构算法知识点系列笔记均是看coderwhy老师视频整理得出!!!
集合比较常见的实现方式是哈希表(后续学习)
集合的特点
- 无序的、不能重复的
- 是特殊的数组,没有顺序不能通过下标值进行访问,不能重复以为这相同的对象在集合中只会存在一份
- 类似于Set,集合的实现其实可以直接使用Set类
集合的常见操作方法
- add(value):向集合添加一个新的项。
- remove(value):从集合移除一个值。
- has(value):如果值在集合中,返回true,否则返回false。
- clear():移除集合中的所有项。
- size():返回集合所包含元素的数量,与数组的length属性类似。
- values():返回一个包含集合中所有值的数组。
- 还有一些集合其他相关的操作,暂时用不太多,这里暂不封装.
集合类的封装
<script>
// 封装集合类
function Set() {
// 由于集合是无序的不能重复复的,所以此时就先不要定义成数组
this.items = {};
// 方法
// 1.add
Set.prototype.add = function (value) {
if (this.has(value)) {
return false;
} else {
this.items[value] = value;
return true;
}
};
// 2.has
Set.prototype.has = function (value) {
return this.items.hasOwnProperty(value);
};
// 3.remove
Set.prototype.remove = function (value) {
// 根据元素本身值进行删除,因为集合是没有下标值的
if (this.has(value)) {
delete this.items[value];
return true;
} else {
return false;
}
};
// 4.clear
Set.prototype.clear = function () {
this.items = {};
};
// 5.size
Set.prototype.size = function () {
return Object.keys(this.items).length;
};
// 6.values 获取集合中所有的值
Set.prototype.values = function () {
return Object.keys(this.items);
};
}
let set = new Set();
</script>
集合类操作
并集
Set.prototype.union = function (otherSet) { // this 集合对象A // otherSet 集合对象B var unionSet = new Set(); var values = this.values(); for (var i = 0; i < values.length; i++) { unionSet.add(values[i]); } values = otherSet.values(); for (var i = 0; i < values.length; i++) { unionSet.add(values[i]); } return unionSet; };
交集
Set.prototype.intersection = function (otherSet) { var intersectionSet = new Set(); var values = this.values(); for (var i = 0; i < values.length; i++) { var item = values[i] if(otherSet.has(item)){ intersectionSet.add(item) } } };
差集
// 差集 Set.prototype.difference = function (otherSet) { var differenceSet = new Set(); var values = this.values(); for (var i = 0; i < values.length; i++) { var item = values[i]; if (!otherSet.has(item)) { differenceSet.add(item); } } return differenceSet; };
子集
// 子集 Set.prototype.subSet = function (otherSet) { var values = this.values(); for (var i = 0; i < values.length; i++) { var item = values[i]; if (!otherSet.has(item)) { return false; } } return true; };