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