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