【JS数据结构与算法】集合

本文深入解析了集合数据结构的特点,包括其无序性和元素唯一性,并详细介绍了集合的封装及其实现方法,如添加、查询、删除元素等基本操作。此外,还探讨了集合之间的并集、交集、差集运算以及子集判断,为读者提供了全面的集合操作指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、数据结构中的集合有什么特点。

二、集合的封装。

三、集合相关操作。

 1、向集合添加一个新的项,方法add(value)。

2、方法has(value),判断集合是否已经存在某元素。

3、clear()移除集合中的所有项。

 4、remove(value)从集合中移除一个值。

5、获取集合的大小。

6、获取集合中所有的值。

四、集合之间的操作。

1、A∪B。

2、 A∩B。

3、 A-B。

五、子集判断。


一、数据结构中的集合有什么特点。

1.集合通常是无序的。

2.集合中的元素不允许重复。

 

二、集合的封装。

使用一个对象来保存集合的元素,在这里说明一下不使用数组来存储集合的原因:因为数组是允许元素重复的,但是集合不允许其中的元素重复,所以减少一些查找与判断。

function Set(){
      // 属性
      this.items = {}
}

三、集合相关操作。

 1、向集合添加一个新的项,方法add(value)。

Set.prototype.add = function(value){
        // 判断集合是否已经存在该元素
        if (this.has(value)) return false;

        // 将元素添加到集合中
        this.items[value] = value;
        return true;
}

2、方法has(value),判断集合是否已经存在某元素。

Set.prototype.has = function(value){
        return this.items.hasOwnProperty(value);
}

3、clear()移除集合中的所有项。

Set.prototype.clear = function(){
        // 重新赋值一个对象
        this.items = {};
}

 4、remove(value)从集合中移除一个值。

Set.prototype.remove = function(value){
        // 4.1 首先判断集合中是否含有该元素
        if (!this.has(value)) return false;

        // 4.2 移除该元素
        delete this.items[value];
        return true;
}

5、获取集合的大小。

Set.prototype.size = function(){
        return Object.keys(this.items).length;
}

6、获取集合中所有的值。

Set.prototype.values = function(){
        return Object.keys(this.items);
}

 

四、集合之间的操作。

1、A∪B。

对于给定的两个集合,返回一个包含两个集合中所有的元素的新集合。

Set.prototype.union = function(setB){
        // this:集合对象A
        // setB:集合对象B
        // 1、创建一个新的集合
        var unionSet = new Set();

        // 2、将A中的所有元素集合添加到新的集合中
        var values = this.values();
        for (var i = 0; i < values.length; i++) {
          unionSet.add(values[i]);
        }


        // 3、将在A中不存在的B中的元素添加到新集合中
        var values = setB.values();
        for (var i = 0; i < values.length; i++) {
          unionSet.add(values[i]);
        }

        return unionSet;
}

 

2、 A∩B。

两个集合的交集。

 Set.prototype.interSection = function(setB){
        // this:集合对象A
        // setB:集合对象B
        // 1、创建一个新的集合
        var interSectionSet = new Set();

        // 2、将同时存在A和B中的元素添加到新的集合中
        var values = setB.values();
        for (var i = 0; i < values.length; i++) {
          if (this.has(values[i]))
            interSectionSet.add(values[i]);
        }

        return interSectionSet;
}

3、 A-B。

两个集合的差集 

 Set.prototype.difference = function(setB){
        // this:集合对象A
        // setB:集合对象B
        // 1、创建一个新的集合
        var differenceSet = new Set();

        // 2、判断A中的元素是否存在B中,如果不存在则插入到新的集合中。
        var values = this.values();
        for (var i = 0; i < values.length; i++) {
          if (!setB.has(values[i]))
            differenceSet.add(values[i]);
        }

        return differenceSet;
}

 

 

五、子集判断。

Set.prototype.subSet = function(setB){
        // this:集合对象A
        // setB:集合对象B

        // 遍历A中的所有元素,判断A中的元素是否都是B中的元素,一旦出现不是,则返回一个false
        var values = this.values();
        for (var i = 0; i < values.length; i++) {
          if (!setB.has(values[i])) return false;
        }

        return true;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值