Java集合工具类
程序员文章站
2022-05-28 07:50:14
...
泛型集合工具类,用于便捷快速的定义、操作集合。包含Set的交集、并集、差集、补集等操作。
import java.util.Set; import java.util.Map; import java.util.List; import java.util.Queue; import java.util.HashSet; import java.util.HashMap; import java.util.TreeMap; import java.util.TreeSet; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; import java.util.LinkedHashMap; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; /** * 包含获得各种集合对象的常用方法的泛型工具类。 ** 如果要获得一个 {@code Map
* * @author Fuchun * @version $Id: GenericUtils.java 4754 2011-03-26 19:50 fuchun $ */ public class GenericUtils { /** * 用该方法来代替 {@code new HashMap} 的对象,可以通过下面的方式实现: * {@literal Map map = GenericUtils.getMap();}。但是不能直接作为参数使用,例如有这样一个方法: * {@literal setInfo(Map )},不能直接这样调用: **setInfo(GenericUtils.getMap())
()} 方式获得新的 {@code java.util.Map} 的实例对象。 * * @param {@code Map} 中的键对象。 * @param {@code Map} 中的值对象。 * @return 返回 {@code java.util.Map } 关于 {@code java.util.HashMap } 实现的新实例。 */ public static Map getMap() { return new HashMap (); } /** * 用该方法来代替 {@code new HashMap (int)} 方式获得新的 {@code java.util.Map} 的实例对象。 * * @param {@code Map} 中的键对象。 * @param {@code Map} 中的值对象。 * @param initialCapacity 初始容量。 * @return 返回 {@code java.util.Map } 关于 {@code java.util.HashMap } 实现的新实例。 */ public static Map getMap(int initialCapacity) { return new HashMap (initialCapacity); } /** * 用该方法来代替 {@code new ConcurrentHashMap ()} 方式获得新的 {@code java.util.Map} 的实例对象。 * * @param {@code Map} 中的键对象。 * @param {@code Map} 中的值对象。 * @return 返回 {@code java.util.Map } 关于 * {@code java.util.concurrent.ConcurrentHashMap } 实现的新实例。 */ public static Map getConcurrentMap() { return new ConcurrentHashMap (); } /** * 用该方法来代替 {@code new ConcurrentHashMap (int)} 方式获得新的 {@code java.util.Map} * 的实例对象。 * * @param {@code Map} 中的键对象。 * @param {@code Map} 中的值对象。 * @param initialCapacity 初始容量。 * @return 返回 {@code java.util.Map } 关于 * {@code java.util.concurrent.ConcurrentHashMap } 实现的新实例。 */ public static Map getConcurrentMap(int initialCapacity) { return new ConcurrentHashMap (initialCapacity); } /** * 用该方法来代替 {@code new LinkedHashMap ()} 方式获得新的 {@code java.util.Map} 的实例对象。 * * @param {@code Map} 中的键对象。 * @param {@code Map} 中的值对象。 * @return 返回 {@code java.util.Map } 关于 {@code java.util.LinkedHashMap } * 实现的新实例。 */ public static Map getLinkedMap() { return new LinkedHashMap (); } /** * 用该方法来代替 {@code new LinkedHashMap (int)} 方式获得新的 {@code java.util.Map} 的实例对象。 * * @param {@code Map} 中的键对象。 * @param {@code Map} 中的值对象。 * @param initialCapacity 初始容量。 * @return 返回 {@code java.util.Map } 关于 {@code java.util.LinkedHashMap } * 实现的新实例。 */ public static Map getLinkedMap(int initialCapacity) { return new LinkedHashMap (initialCapacity); } /** * 用该方法来代替 {@code new TreeMap ()} 方式获得新的 {@code java.util.Map} 的实例对象。 * * @param {@code Map} 中的键对象。 * @param {@code Map} 中的值对象。 * @return 返回 {@code java.util.Map } 关于 {@code java.util.TreeMap } 实现的新实例。 */ public static Map getTreeMap() { return new TreeMap (); } /** * 用该方法来代替 {@code new ConcurrentHashMap ()} 方式获得新的 * {@code java.util.concurrent.ConcurrentHashMap} 的实例对象。 * * @param {@code Map} 中的键对象。 * @param {@code Map} 中的值对象。 * @return 返回 {@code java.util.concurrent.ConcurrentMap } 关于 * {@code java.util.concurrent.ConcurrentHashMap } 实现的新实例。 */ public static ConcurrentMap getConcurrentHashMap() { return new ConcurrentHashMap (); } /** * 用该方法来代替 {@code new ConcurrentHashMap (int)} 方式获得新的 * {@code java.util.concurrent.ConcurrentHashMap} 的实例对象。 * * @param {@code Map} 中的键对象。 * @param {@code Map} 中的值对象。 * @param initialCapacity 初始容量。 * @return 返回 {@code java.util.concurrent.ConcurrentMap } 关于 * {@code java.util.concurrent.ConcurrentHashMap } 实现的新实例。 */ public static ConcurrentMap getConcurrentHashMap(int initialCapacity) { return new ConcurrentHashMap (initialCapacity); } /** * 用该方法来代替 {@code new ArrayList ()} 方式获得新的 {@code java.util.List} 的实例对象。 * * @param {@code List } 中保存的对象。 * @return 返回 {@code java.util.List } 关于 {@code java.util.ArrayList } 实现的新实例。 */ public static List getList() { return new ArrayList (); } /** * 用该方法来代替 {@code new ArrayList (int)} 方式获得新的 {@code java.util.List} 的实例对象。 * * @param {@code List } 中保存的对象。 * @param initialCapacity 列表的初始容量。 * @return 返回 {@code java.util.List } 关于 {@code java.util.ArrayList } 实现的新实例。 */ public static List getList(int initialCapacity) { return new ArrayList (initialCapacity); } /** * 用该方法来代替 {@code new ArrayList ()} 方式获得新的 {@code java.util.List} 的实例对象。 * * @param {@code List } 中保存的对象。 * @param c 其中的元素将存放在新的 {@code list} 中的 {@code collection}。 * @return 返回 {@code java.util.List } 关于 {@code java.util.ArrayList } 实现的新实例。 */ public static List getList(Collection extends T> c) { if (ObjectUtils.isNotEmpty(c)) return new ArrayList (c); return new ArrayList (); } /** * 用该方法来代替 {@code new LinkedList ()} 方式获得新的 {@code java.util.List} 的实例对象。 * * @param {@code List } 中保存的对象。 * @return 返回 {@code java.util.List } 关于 {@code java.util.LinkedList } 实现的新实例。 */ public static List getLinkedList() { return new LinkedList (); } /** * 用该方法来代替 {@code new HashSet ()} 方式获得新的 {@code java.util.Set} 的实例对象。 * * @param {@code Set } 中保存的对象。 * @return 返回 {@code java.util.Set } 关于 {@code java.util.HashSet } 实现的新实例。 */ public static Set getHashSet() { return new HashSet (); } /** * 用该方法来代替 {@code new HashSet (int)} 方式获得新的 {@code java.util.Set} 的实例对象。 * * @param {@code Set } 中保存的对象。 * @param initialCapacity 列表的初始容量。 * @return 返回 {@code java.util.Set } 关于 {@code java.util.HashSet } 实现的新实例。 */ public static Set getHashSet(int initialCapacity) { return new HashSet (initialCapacity); } /** * 用该方法来代替 new HashSet
方式获得新的 * {@code java.util.Set} 的实例对象。 * * @param(Collection extends T> c) {@code Set} 中保存的对象。 * @param c 其中的元素将存放在新的 {@code set} 中的 {@code collection}。 * @return 返回 {@code java.util.Set } 关于 {@code java.util.HashSet } 实现的新实例。 */ public static Set getHashSet(Collection extends T> c) { if (ObjectUtils.isEmpty(c)) return new HashSet (); return new HashSet (c); } /** * 用该方法来代替 {@code new TreeSet ()} 方式获得新的 {@code java.util.Set} 的实例对象。 * * @param {@code Set } 中保存的对象。 * @return 返回 {@code java.util.Set } 关于 {@code java.util.TreeSet } 实现的新实例。 */ public static Set getTreeSet() { return new TreeSet (); } /** * 用该方法来代替 new TreeSet
方式获得新的 * {@code java.util.Set} 的实例对象。 * * @param(Collection extends T> c) {@code Set} 中保存的对象。 * @param c 其中的元素将存放在新的 {@code set} 中的 {@code collection}。 * @return 返回 {@code java.util.Set } 关于 {@code java.util.TreeSet } 实现的新实例。 */ public static Set getTreeSet(Collection extends T> c) { if (ObjectUtils.isEmpty(c)) return new TreeSet (); return new TreeSet (c); } /** * 用该方法来代替 {@code new LinkedList ()} 方式获得新的 {@code java.util.Queue} 的实例对象。 * * @param {@code Queue } 中保存的对象。 * @return 返回 {@code java.util.Queue } 关于 {@code java.util.LinkedList } 实现的新实例。 */ public static Queue getQueue() { return new LinkedList (); } /** * 合并两个有相同元素类型的 {@code java.util.Set}。 * *
* * @param- {@code setA == null && setB == null} --> 返回 {@link #getHashSet()}。
*- {@code setA != null && setB == null} --> 返回 {@code setA}。
*- {@code setA == null && setB != null} --> 返回 {@code setB}。
*- {@code setA != null && setB != null} --> 返回 {@code setA} 和 {@code setB} 的并集。 *
*{@code Set} 中保存的对象。 * @param setA 第一个 {@code Set}。 * @param setB 第二个 {@code Set}。 * @return 返回 {@code setA} 和 {@code setB} 的并集。 */ public static Set unionHashSet(Set setA, Set 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 result = getHashSet(setA); result.addAll(setB); return result; } /** * 取两个有相同元素类型的 {@code java.util.Set} 的交集,即公共部份的新的 {@code java.util.Set}。 * *
* * @param- {@code setA == null && setB == null} --> 返回 {@code null}。
*- {@code setA != null && setB == null} --> 返回 {@code null}。
*- {@code setA == null && setB != null} --> 返回 {@code null}。
*- {@code setA != null && setB != null} --> 返回 {@code setA} 和 {@code setB} 的交集。 *
*{@code Set} 中保存的对象。 * @param setA 第一个 {@code Set}。 * @param setB 第二个 {@code Set}。 * @return 返回 {@code setA} 和 {@code setB} 的交集。 */ public static Set intersectHashSet(Set setA, Set setB) { if (ObjectUtils.isEmpty(setA) || ObjectUtils.isEmpty(setB)) return null; Set result = getHashSet(setA); result.retainAll(setB); return result; } /** * 移除 {@code setA} 中那些包含在 {@code setB} 中的元素。
* 此方法不会修改 {@code setA},只是复制一份作相应操作,返回的是全新的 {@code Set} 对象。 **
* * @param- {@code setA == null} --> 返回 {@code null}。
*- {@code setB == null} --> 返回 {@code setA}。
*- {@code setA != null && setB != null} --> 返回 {@code setA} 和 {@code setB} * 的不对称差集。
*{@code Set} 中保存的对象。 * @param setA 第一个 {@code Set}。 * @param setB 第二个 {@code Set}。 * @return 返回 {@code setA} 和 {@code setB} 的不对称差集。 */ public static Set differenceHashSet(Set setA, Set setB) { if (ObjectUtils.isEmpty(setA)) return null; if (ObjectUtils.isEmpty(setB)) return setA; Set result = getHashSet(setA); result.removeAll(setB); return result; } /** * 取两个有相同元素类型的 {@code java.util.Set} 的补集。 * * @param {@code Set} 中保存的对象。 * @param setA 第一个 {@code Set}。 * @param setB 第二个 {@code Set}。 * @return 返回 {@code setA} 和 {@code setB} 的补集。 */ public static Set complementHashSet(Set setA, Set setB) { return differenceHashSet(unionHashSet(setA, setB), intersectHashSet(setA, setB)); } }