为什么80%的码农都做不了架构师?>>>   

/**
     * 用该方法来代替 { @code new LinkedList<E>()} 方式获得新的 { @code java.util.Queue} 的实例对象。
     *
     * @param <E> { @code Queue<E>} 中保存的对象。
     * @return 返回 { @code java.util.Queue<E>} 关于 { @code java.util.LinkedList<E>} 实现的新实例。
     */
    public static <E> Queue<E> getQueue() {
        return new LinkedList<E>();
    }

/**
     * 合并两个有相同元素类型的 {@code java.util.Set}。
     * <ul>
     * <li>{@code setA == null && setB == null} --&gt; 返回 {@link #getHashSet()}。</li>
     * <li>{@code setA != null && setB == null} --&gt; 返回 {@code setA}。</li>
     * <li>{@code setA == null && setB != null} --&gt; 返回 {@code setB}。</li>
     * <li>{@code setA != null && setB != null} --&gt; 返回 {@code setA} 和 {@code setB} 的并集。
     * </li>
     * </ul>
     *
     * @param <T> {@code Set} 中保存的对象。
     * @param setA 第一个 {@code Set}。
     * @param setB 第二个 {@code Set}。
     * @return 返回 {@code setA} 和 {@code setB} 的并集。
     */
    public static <T> Set<T> unionHashSet(Set<T> setA, Set<T> setB) {
        boolean isEmptySetA = ObjectUtils.isEmpty(setA);
        boolean isEmptySetB = ObjectUtils.isEmpty(setB);
        if (isEmptySetA && isEmptySetB)
            return getHashSet();
        if (isEmptySetA && !isEmptySetB)
            return setB;
        if (!isEmptySetA && isEmptySetB)
            return setA;
        Set<T> result = getHashSet(setA);
        result.addAll(setB);
        return result;
    }

/**
     * 取两个有相同元素类型的 {@code java.util.Set} 的交集,即公共部份的新的 {@code java.util.Set}。
     * <ul>
     * <li>{@code setA == null && setB == null} --&gt; 返回 {@code null}。</li>
     * <li>{@code setA != null && setB == null} --&gt; 返回 {@code null}。</li>
     * <li>{@code setA == null && setB != null} --&gt; 返回 {@code null}。</li>
     * <li>{@code setA != null && setB != null} --&gt; 返回 {@code setA} 和 {@code setB} 的交集。
     * </li>
     * </ul>
     *
     * @param <T> {@code Set} 中保存的对象。
     * @param setA 第一个 {@code Set}。
     * @param setB 第二个 {@code Set}。
     * @return 返回 {@code setA} 和 {@code setB} 的交集。
     */
    public static <T> Set<T> intersectHashSet(Set<T> setA, Set<T> setB) {
        if (ObjectUtils.isEmpty(setA) || ObjectUtils.isEmpty(setB))
            return null;
        Set<T> result = getHashSet(setA);
        result.retainAll(setB);
        return result;
    }

/**
     * 移除 {@code setA} 中那些包含在 {@code setB} 中的元素。<br />
     * 此方法不会修改 {@code setA},只是复制一份作相应操作,返回的是全新的 {@code Set} 对象。
     * <ul>
     * <li>{@code setA == null} --&gt; 返回 {@code null}。</li>
     * <li>{@code setB == null} --&gt; 返回 {@code setA}。</li>
     * <li>{@code setA != null && setB != null} --&gt; 返回 {@code setA} 和 {@code setB}
     * 的不对称差集。</li>
     * </ul>
     *
     * @param <T> {@code Set} 中保存的对象。
     * @param setA 第一个 {@code Set}。
     * @param setB 第二个 {@code Set}。
     * @return 返回 {@code setA} 和 {@code setB} 的不对称差集。
     */
    public static <T> Set<T> differenceHashSet(Set<T> setA, Set<T> setB) {
        if (ObjectUtils.isEmpty(setA))
            return null;
        if (ObjectUtils.isEmpty(setB))
            return setA;
        Set<T> result = getHashSet(setA);
        result.removeAll(setB);
        return result;
    }

/**
     * 取两个有相同元素类型的 {@code java.util.Set} 的补集。
     *
     * @param <T> {@code Set} 中保存的对象。
     * @param setA 第一个 {@code Set}。
     * @param setB 第二个 {@code Set}。
     * @return 返回 {@code setA} 和 {@code setB} 的补集。
     */
    public static <T> Set<T> complementHashSet(Set<T> setA, Set<T> setB) {
        return differenceHashSet(unionHashSet(setA, setB), intersectHashSet(setA, setB));
    }
}

转载于:https://my.oschina.net/ly5156/blog/75205

Java集合工具类(三)-泛型集合工具类,用于便捷快速的定义、操作集合。包含Set的交集、并集......相关推荐

  1. 常用工具类 (三) : Hutool 常用工具类整理 (全)

    文章目录 官方文档 一.基础工具类 StrUtil / StringUtils 字符串工具类 DateUtil 日期工具类 NumberUtil 数字工具类 BeanUtil JavaBean工具类 ...

  2. Java学习的第三十天(JavaSE结束篇02_学生管理系统(集合+异常处理+对象流+递归输入判断))

    一.学生管理系统的业务需求 1.需要有一个学生类,它有四个成员变量:ID 姓名 性别 班级 2.成员变量必须私有化,然后只能通过set方法赋值,通过get方法取值 3.通过set方法赋值时,如果输入的 ...

  3. Java基础学习——Java网络编程(三)自定义枚举类、枚举类的常用方法、枚举类实现接口、枚举类的实际应用

    一.什么是枚举 枚举法:一枚一枚的列举出来,列举的元素是有限的.确定的. 例如:星期(一.二.三.四.五.六.日).性别(男.女).季节(春.夏.秋.冬) 在Java中的关键字为enum 二.枚举类的 ...

  4. Java中集合相关案例(泛型通配符、Collections工具类、TreeSet、TreeMap、HashMap、HashSet和集合嵌套案例)

    集合 一.集合相关案例 1.泛型通配符案例 2.集合工具类(Collections工具类) 3.TreeSet和TreeMap案例 4.HashMap案例 5.HashSet案例 6.TreeSet案 ...

  5. java内部类、接口、集合框架、泛型、工具类、实现类

    一.内部类 1.成员内部类. (1)成员内部类的实例化: 外部类名.内部类名   变量名=外部类对象.new 内部类名(); class Person{class Test{}}Person p=ne ...

  6. Java基础巩固(二)异常,多线程,线程池,IO流,Properties集合,IO工具类,字符流,对象流,Stream,Lambda表达式

    一.异常,多线程 学习目标 : 异常的概述 异常的分类 异常的处理方式 自定义异常 多线程入门 1 异常的概述 1.1 什么是异常? 异常就是程序出现了不正常情况 , 程序在执行过程中 , 数据导致程 ...

  7. Day22.List集合、ArrayList、LinkedList、集合工具类、泛型、通配符

    目录 List接口 ArrayList(最常用) LinkedList Collections 集合工具类 使用泛型 泛型(Generics) 自定义泛型 类型通配符 List接口 List接口存储元 ...

  8. 面向对象语言(JAVA)——工具类(Collections(操作集合)代码实现理解)

    工具类,顾名思义就是Java中工具的类. Collections 类是 Java提供的一个操作 Set.List 和 Map 等集 合的工具类.Collections 类提供了许多操作集合的静态方 法 ...

  9. android list 替换元素_Java 集合(二)——Set 集合、List 集合和 Collections 工具类...

    一.前言 在 Java 集合(一)中我们已经讲了 Collection 集合接口.Iterator 迭代器和泛型,今天我们来讲 Set 集合.List 集合 和 Collections 工具类. 二. ...

最新文章

  1. vim介绍,vim颜色显示,vim一般模式下移动光标,vim一般模式下的复制、剪切和粘贴...
  2. Python 3.6 安装 Shapely
  3. GDCM:gdcm::ImageFragmentSplitter的测试程序
  4. 【C语言】判断花括号{}是否匹配
  5. (数据科学学习手札03)Python与R在随机数生成上的异同
  6. 伸缩菜单----html文件
  7. 理解jQuery的 $ 和 $( )的含义
  8. 词法分析实验报告(一)
  9. 微信团队的深度学习框架deepx_core开源啦
  10. js解析网址获取需要的数据
  11. JavaScript语法详解:运算符和表达式
  12. 深度理解__proto__ 和 prototype
  13. 移动端车牌识别SDK集成免手工录入
  14. 图形化硬件编程 ——数码管时钟——之米思齐篇
  15. webpack中loader和plugin的区别
  16. HTTP/3正式发布,深入理解HTTP/3协议
  17. 还只会用小黄鸭解压?看来你不是一个时髦的程序员!
  18. PHPStorm中使用phpcs和php-cs-fixer
  19. 编译原理实验二 自上而下语法分析
  20. 原生js时间格式化方法封装

热门文章

  1. LaTex中的documentclass{type}应该填什么
  2. 在后SCI时代需要什么样的人才?
  3. ​MEMS在未来面临的挑战
  4. 塔勒布: 2019-nCoV的系统风险:一份笔记
  5. 【机器视觉】机器视觉产业链
  6. 李飞飞重返斯坦福后的大动作:开启「以人为中心的AI计划」
  7. 麦肯锡全球调研160个案例,发布5个行业34个AI应用场景
  8. 俄罗斯、乌克兰程序员薪资大曝光!年薪普遍 15w+,女程序员比男程序员收入高?...
  9. 程序员之天梯排行榜 | 每日趣闻
  10. 10 年了,腾讯微信后台第一天提交的代码曝光 | 每日趣闻