Java集合工具类(三)-泛型集合工具类,用于便捷快速的定义、操作集合。包含Set的交集、并集......
为什么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} --> 返回 {@link #getHashSet()}。</li>
* <li>{@code setA != null && setB == null} --> 返回 {@code setA}。</li>
* <li>{@code setA == null && setB != null} --> 返回 {@code setB}。</li>
* <li>{@code setA != null && setB != null} --> 返回 {@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} --> 返回 {@code null}。</li>
* <li>{@code setA != null && setB == null} --> 返回 {@code null}。</li>
* <li>{@code setA == null && setB != null} --> 返回 {@code null}。</li>
* <li>{@code setA != null && setB != null} --> 返回 {@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} --> 返回 {@code null}。</li>
* <li>{@code setB == null} --> 返回 {@code setA}。</li>
* <li>{@code setA != null && setB != null} --> 返回 {@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的交集、并集......相关推荐
- 常用工具类 (三) : Hutool 常用工具类整理 (全)
文章目录 官方文档 一.基础工具类 StrUtil / StringUtils 字符串工具类 DateUtil 日期工具类 NumberUtil 数字工具类 BeanUtil JavaBean工具类 ...
- Java学习的第三十天(JavaSE结束篇02_学生管理系统(集合+异常处理+对象流+递归输入判断))
一.学生管理系统的业务需求 1.需要有一个学生类,它有四个成员变量:ID 姓名 性别 班级 2.成员变量必须私有化,然后只能通过set方法赋值,通过get方法取值 3.通过set方法赋值时,如果输入的 ...
- Java基础学习——Java网络编程(三)自定义枚举类、枚举类的常用方法、枚举类实现接口、枚举类的实际应用
一.什么是枚举 枚举法:一枚一枚的列举出来,列举的元素是有限的.确定的. 例如:星期(一.二.三.四.五.六.日).性别(男.女).季节(春.夏.秋.冬) 在Java中的关键字为enum 二.枚举类的 ...
- Java中集合相关案例(泛型通配符、Collections工具类、TreeSet、TreeMap、HashMap、HashSet和集合嵌套案例)
集合 一.集合相关案例 1.泛型通配符案例 2.集合工具类(Collections工具类) 3.TreeSet和TreeMap案例 4.HashMap案例 5.HashSet案例 6.TreeSet案 ...
- java内部类、接口、集合框架、泛型、工具类、实现类
一.内部类 1.成员内部类. (1)成员内部类的实例化: 外部类名.内部类名 变量名=外部类对象.new 内部类名(); class Person{class Test{}}Person p=ne ...
- Java基础巩固(二)异常,多线程,线程池,IO流,Properties集合,IO工具类,字符流,对象流,Stream,Lambda表达式
一.异常,多线程 学习目标 : 异常的概述 异常的分类 异常的处理方式 自定义异常 多线程入门 1 异常的概述 1.1 什么是异常? 异常就是程序出现了不正常情况 , 程序在执行过程中 , 数据导致程 ...
- Day22.List集合、ArrayList、LinkedList、集合工具类、泛型、通配符
目录 List接口 ArrayList(最常用) LinkedList Collections 集合工具类 使用泛型 泛型(Generics) 自定义泛型 类型通配符 List接口 List接口存储元 ...
- 面向对象语言(JAVA)——工具类(Collections(操作集合)代码实现理解)
工具类,顾名思义就是Java中工具的类. Collections 类是 Java提供的一个操作 Set.List 和 Map 等集 合的工具类.Collections 类提供了许多操作集合的静态方 法 ...
- android list 替换元素_Java 集合(二)——Set 集合、List 集合和 Collections 工具类...
一.前言 在 Java 集合(一)中我们已经讲了 Collection 集合接口.Iterator 迭代器和泛型,今天我们来讲 Set 集合.List 集合 和 Collections 工具类. 二. ...
最新文章
- vim介绍,vim颜色显示,vim一般模式下移动光标,vim一般模式下的复制、剪切和粘贴...
- Python 3.6 安装 Shapely
- GDCM:gdcm::ImageFragmentSplitter的测试程序
- 【C语言】判断花括号{}是否匹配
- (数据科学学习手札03)Python与R在随机数生成上的异同
- 伸缩菜单----html文件
- 理解jQuery的 $ 和 $( )的含义
- 词法分析实验报告(一)
- 微信团队的深度学习框架deepx_core开源啦
- js解析网址获取需要的数据
- JavaScript语法详解:运算符和表达式
- 深度理解__proto__ 和 prototype
- 移动端车牌识别SDK集成免手工录入
- 图形化硬件编程 ——数码管时钟——之米思齐篇
- webpack中loader和plugin的区别
- HTTP/3正式发布,深入理解HTTP/3协议
- 还只会用小黄鸭解压?看来你不是一个时髦的程序员!
- PHPStorm中使用phpcs和php-cs-fixer
- 编译原理实验二 自上而下语法分析
- 原生js时间格式化方法封装
热门文章
- LaTex中的documentclass{type}应该填什么
- 在后SCI时代需要什么样的人才?
- ​MEMS在未来面临的挑战
- 塔勒布: 2019-nCoV的系统风险:一份笔记
- 【机器视觉】机器视觉产业链
- 李飞飞重返斯坦福后的大动作:开启「以人为中心的AI计划」
- 麦肯锡全球调研160个案例,发布5个行业34个AI应用场景
- 俄罗斯、乌克兰程序员薪资大曝光!年薪普遍 15w+,女程序员比男程序员收入高?...
- 程序员之天梯排行榜 | 每日趣闻
- 10 年了,腾讯微信后台第一天提交的代码曝光 | 每日趣闻