用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中的元素。
?
轉載于:https://www.cnblogs.com/chmusk/p/11078936.html
總結
以上是生活随笔為你收集整理的用java编程实现集合的交、并、差和补运算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 农业银行信用卡账单分期能提前还款吗?手续
- 下一篇: 蓝桥杯 历届试题 九宫重排 (bfs+康