Set集合:求交集、并集和差集

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,暂时还没有想明白。

猜你喜欢

转载自blog.csdn.net/mnimxq/article/details/121621156