zoukankan      html  css  js  c++  java
  • 用java编程实现集合的交、并、差和补运算

     

     

    一、实验目的

    掌握集合的交、并、差和补运算,并且使用计算机编程实现。

    二、实验内容

    通过编程实现求给定集合A和B的并集C(C=A∪B)、交集C(C=A∩B)、差集C(C=A-B)、补集~C=E-C的运算。

    三、实验要求

    C、C++或Jave语言编程实现

    四、实验原理

    1、根据交集的定义:C={x | x∈A∧x∈B},我们将集合A的各个元素与集合B的元素进行比较,若在集合B中存在某个元素和集合A中一元素相等,则将该元素送入交集C之中。

    2、并集的定义为:C={x|x∈A∨x∈B},所以,只要将集合A与B合在一起就得到了并集C。但是,在一个集合中,同样的元素没必要出现两次或两次以上,所以,在将集合A送入并集C后,应将集合B中与A中相同的元素删除,再将集合B送入并集C之中。

    3、差集C的定义:差集C={x|x∈A∧xB},即对于集合A中的元素ai,若不存在bj∈B(j=1,2,…..,m),使得ai=bj,则ai ∈差集C。

    4、补集C的定义:~C=E-C={ x|x∈E∧xC }

    五、实验过程

    源代码

    package cn.sal.lisan;

    import java.util.HashSet;

    import java.util.Set;

    import java.util.Scanner;

    public class Bingjiao {

        public static void main(String[] args) {

            Set<Integer> result = new HashSet<Integer>();

            Set<Integer> A = new HashSet<Integer>();         

            Set<Integer> B = new HashSet<Integer>();

            Set<Integer> E=new HashSet<Integer>();

            //以上是为了为四个集合开辟内存空间,方便后续赋值

            

            

            System.out.println("请先输入A,B,E每个集合的元素个数,然后依次输入集合中的元素");

            Scanner scanner=new Scanner(System.in);//获取控制台输入

            int x=scanner.nextInt();//获取A集合的元素个数

            int y=scanner.nextInt();//获取B集合元素个数

            int z=scanner.nextInt();//获取E集合元素个数

          //  int[] a=new int[x];

            for(int i=0;i<x;i++)

            {

             int i1=scanner.nextInt();

             A.add(i1);

            }

            //为A集合赋值

            for(int j=0;j<y;j++)

            {

             int j1=scanner.nextInt();

             B.add(j1);

            }

            //为B集合赋值

            for(int k=0;k<z;k++)

            {

             int k1=scanner.nextInt();

             E.add(k1);

            }

            System.out.println("E ="+E.toString());

            System.out.println("A = "+A.toString());

            System.out.println("B = "+B.toString());

             

            result.clear();//清除result中的元素

            result.addAll(A);//将A集合中的元素放入result中

            result.retainAll(B);//去除A中的所有不在B中的元素

            System.out.println("交集 = " + result);

             

            result.clear();

            result.addAll(A);

            result.removeAll(B);//清除A中所有属于B的元素

            System.out.println("差集 = "+result);

             

            result.clear();

            result.addAll(A);

            result.addAll(B);//把A,B中的元素都加入进去,而且set中不会有重复的元素

            System.out.println("并集 = " + result);

            

            

            result.clear();

            result.addAll(E);

            result.removeAll(A);//跟差集一样

            System.out.println("补集 ="+result);

        }

    }

    实验结果

    请先输入A,B,E每个集合的元素个数,然后依次输入集合中的元素

    2 4 5

    1 2

    1 3 4 5

    1 2 3 4 5

    E =[1, 2, 3, 4, 5]

    A = [1, 2]

    B = [1, 3, 4, 5]

    AB交集 = [1]

    AB差集 = [2]

    AB并集 = [1, 2, 3, 4, 5]

    AB补集 =[3, 4, 5]

     

     

    • 实验总结

    总结:因为这次离散实验可以用java写,而java中HashSet类恰好有add()  remove()等方法直接用来计算集合的并集,交集,差集,所以本次实验就使用java语言来完成了,这次实验利用了set类的特性,即不会出现相同的元素,和集合定义相符合,该题的思路是,利用scanner类获取用户的输入值,然后利用set类的add方法,将用户输入的集合元素全部放入相应的集合中,此后,具体到求交集并集差集时,先引入第三个变量result作存储(引入第三方是为了不改变已定义好的集合的值),在计算交集时,先用addall方法把A集合全部放入result中,然后result调用retainAll(B)方法,保留result中存在B中的元素,同样,计算并集时,用addAll方法,把A和B集合都放在result中,利用set不允许集合出现重复元素特性,可得到A和B的并集,在求差集时,调用removeAll方法,可除去A中存在B中的元素,在求补集时,也是利用差集思想,去除E中存在A中的元素。

     

  • 相关阅读:
    洛谷P3768 简单的数学题 【莫比乌斯反演 + 杜教筛】
    13.1.2 拷贝赋值运算符、析构函数、三/五法则、阻止拷贝
    拷贝构造函数和深拷贝例子
    拷贝构造函数和深拷贝例子
    动态数组、allocator 类
    智能指针和异常、 weak_ptr、unique_ptr
    12.动态内存和智能指针、 直接管理内存、shared_ptr和new结合使用
    8.2 文件输入输出
    7.3 类的其他特性 笔记
    8.1.1 IO
  • 原文地址:https://www.cnblogs.com/chmusk/p/11078936.html
Copyright © 2011-2022 走看看