用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中的元素。

 

posted @ 2018-12-02 12:38  ch_musk  阅读(2028)  评论(0编辑  收藏  举报