package com.miaoqiang.collectiontest;
import java.util.*;
/**
* 求set集合的交集、并集和差集
* @Author: 苗晓强
* @Date: 2021/11/29 17:31
*/
public class SetTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入A集合大小,系统会自动生成相对应数量的元素的集合:");
int i = scanner.nextInt();
Set<Integer> setA = new HashSet<Integer>();
for (int j = 0; j < i; j++) {
setA.add(getRandomNumbers());
}
System.out.println("迭代器展示集合A的内容:");
Iterator<Integer> iterator = setA.iterator();
while (iterator.hasNext()){
System.out.print(iterator.next() + " ");
}
System.out.println();
System.out.println("for循环展示集合A的内容:");
for (Integer number: setA) {
System.out.print(number + " ");
}
System.out.println();
System.out.println("请输入B集合大小,系统会自动生成相对应数量的元素的集合:");
int m = scanner.nextInt();
Set<Integer> setB = new HashSet<Integer>();
for (int j = 0; j < m; j++) {
setB.add(getRandomNumbers());
}
System.out.println(setB.size());
System.out.println("迭代器展示集合B的内容:");
Iterator<Integer> iterator1 = setB.iterator();
while (iterator1.hasNext()){
System.out.print(iterator1.next() + " ");
}
System.out.println();
Set<Integer> result = new HashSet<Integer>();
//添加集合A的数据到result中
result.addAll(setA);
//求集合A和集合B的交集
//result.retainAll(setB);
//System.out.println("集合A和B的交集是:" + result);
//求两个集合的并集 因为set无序不重复的特性,决定了,求并集,直接添加即可
//result.addAll(setB);
//System.out.println("集合A和B的并集是:" + result);
result.addAll(setA);
result.removeAll(setB);
System.out.println("集合A和集合B的差集:" + result);
}
/**
* 随机获取 1~100的数字
* @return
*/
private static Integer getRandomNumbers() {
Random random = new Random();
return random.nextInt(100) + 1;
}
}
反思:主要利用了Set集合不重复的特性,涉及的主要方法有
result.addAll(setA);
result.retainAll(setB);
result.removeAll(setB);
同时也使用了Scanner类从控制台读取数据,随机类Random随机生产数字,以及使用Iterator迭代器循环遍历Set集合,不足之处是,在对集合B进行设定集合容量的时候,偶发性会将集合的容量减一,即,明明在控制台输入的是6,但是,集合B的容量却是5,暂时还没有想明白。