zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Java集合工具类详解编程语言

2023-06-13 09:20:29 时间

泛型集合工具类,用于便捷快速的定义、操作集合。包含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; 

 * 包含获得各种集合对象的常用方法的泛型工具类。 

 * p 

 * 如果要获得一个 [email protected] Map String, String } 的对象,可以通过下面的方式实现: 

 * [email protected] Map String, String map = GenericUtils.getMap();}。但是不能直接作为参数使用,例如有这样一个方法: 

 * [email protected] setInfo(Map String, String )},不能直接这样调用: s 

 * code setInfo(GenericUtils.getMap()) /code /s 

 * /p 

 * @author Fuchun 

 * @version $Id: GenericUtils.java 4754 2011-03-26 19:50 fuchun $ 

public class GenericUtils { 

 /** 

 * 用该方法来代替 [email protected] new HashMap K, V ()} 方式获得新的 [email protected] java.util.Map} 的实例对象。 

 * @param K [email protected] Map} 中的键对象。 

 * @param V [email protected] Map} 中的值对象。 

 * @return 返回 [email protected] java.util.Map K, V } 关于 [email protected] java.util.HashMap K, V } 实现的新实例。 

 public static K, V Map K, V getMap() { 

 return new HashMap K, V 

 /** 

 * 用该方法来代替 [email protected] new HashMap K, V (int)} 方式获得新的 [email protected] java.util.Map} 的实例对象。 

 * @param K [email protected] Map} 中的键对象。 

 * @param V [email protected] Map} 中的值对象。 

 * @param initialCapacity 初始容量。 

 * @return 返回 [email protected] java.util.Map K, V } 关于 [email protected] java.util.HashMap K, V } 实现的新实例。 

 public static K, V Map K, V getMap(int initialCapacity) { 

 return new HashMap K, V (initialCapacity); 

 /** 

 * 用该方法来代替 [email protected] new ConcurrentHashMap K, V ()} 方式获得新的 [email protected] java.util.Map} 的实例对象。 

 * @param K [email protected] Map} 中的键对象。 

 * @param V [email protected] Map} 中的值对象。 

 * @return 返回 [email protected] java.util.Map K, V } 关于 

 * [email protected] java.util.concurrent.ConcurrentHashMap K, V } 实现的新实例。 

 public static K, V Map K, V getConcurrentMap() { 

 return new ConcurrentHashMap K, V 

 /** 

 * 用该方法来代替 [email protected] new ConcurrentHashMap K, V (int)} 方式获得新的 [email protected] java.util.Map} 

 * 的实例对象。 

 * @param K [email protected] Map} 中的键对象。 

 * @param V [email protected] Map} 中的值对象。 

 * @param initialCapacity 初始容量。 

 * @return 返回 [email protected] java.util.Map K, V } 关于 

 * [email protected] java.util.concurrent.ConcurrentHashMap K, V } 实现的新实例。 

 public static K, V Map K, V getConcurrentMap(int initialCapacity) { 

 return new ConcurrentHashMap K, V (initialCapacity); 

 /** 

 * 用该方法来代替 [email protected] new LinkedHashMap K, V ()} 方式获得新的 [email protected] java.util.Map} 的实例对象。 

 * @param K [email protected] Map} 中的键对象。 

 * @param V [email protected] Map} 中的值对象。 

 * @return 返回 [email protected] java.util.Map K, V } 关于 [email protected] java.util.LinkedHashMap K, V } 

 * 实现的新实例。 

 public static K, V Map K, V getLinkedMap() { 

 return new LinkedHashMap K, V 

 /** 

 * 用该方法来代替 [email protected] new LinkedHashMap K, V (int)} 方式获得新的 [email protected] java.util.Map} 的实例对象。 

 * @param K [email protected] Map} 中的键对象。 

 * @param V [email protected] Map} 中的值对象。 

 * @param initialCapacity 初始容量。 

 * @return 返回 [email protected] java.util.Map K, V } 关于 [email protected] java.util.LinkedHashMap K, V } 

 * 实现的新实例。 

 public static K, V Map K, V getLinkedMap(int initialCapacity) { 

 return new LinkedHashMap K, V (initialCapacity); 

 /** 

 * 用该方法来代替 [email protected] new TreeMap K, V ()} 方式获得新的 [email protected] java.util.Map} 的实例对象。 

 * @param K [email protected] Map} 中的键对象。 

 * @param V [email protected] Map} 中的值对象。 

 * @return 返回 [email protected] java.util.Map K, V } 关于 [email protected] java.util.TreeMap K, V } 实现的新实例。 

 public static K, V Map K, V getTreeMap() { 

 return new TreeMap K, V 

 /** 

 * 用该方法来代替 [email protected] new ConcurrentHashMap K, V ()} 方式获得新的 

 * [email protected] java.util.concurrent.ConcurrentHashMap} 的实例对象。 

 * @param K [email protected] Map} 中的键对象。 

 * @param V [email protected] Map} 中的值对象。 

 * @return 返回 [email protected] java.util.concurrent.ConcurrentMap K, V } 关于 

 * [email protected] java.util.concurrent.ConcurrentHashMap K, V } 实现的新实例。 

 public static K, V ConcurrentMap K, V getConcurrentHashMap() { 

 return new ConcurrentHashMap K, V 

 /** 

 * 用该方法来代替 [email protected] new ConcurrentHashMap K, V (int)} 方式获得新的 

 * [email protected] java.util.concurrent.ConcurrentHashMap} 的实例对象。 

 * @param K [email protected] Map} 中的键对象。 

 * @param V [email protected] Map} 中的值对象。 

 * @param initialCapacity 初始容量。 

 * @return 返回 [email protected] java.util.concurrent.ConcurrentMap K, V } 关于 

 * [email protected] java.util.concurrent.ConcurrentHashMap K, V } 实现的新实例。 

 public static K, V ConcurrentMap K, V getConcurrentHashMap(int initialCapacity) { 

 return new ConcurrentHashMap K, V (initialCapacity); 

 /** 

 * 用该方法来代替 [email protected] new ArrayList T ()} 方式获得新的 [email protected] java.util.List} 的实例对象。 

 * @param T [email protected] List T } 中保存的对象。 

 * @return 返回 [email protected] java.util.List T } 关于 [email protected] java.util.ArrayList T } 实现的新实例。 

 public static T List T getList() { 

 return new ArrayList T 

 /** 

 * 用该方法来代替 [email protected] new ArrayList T (int)} 方式获得新的 [email protected] java.util.List} 的实例对象。 

 * @param T [email protected] List T } 中保存的对象。 

 * @param initialCapacity 列表的初始容量。 

 * @return 返回 [email protected] java.util.List T } 关于 [email protected] java.util.ArrayList T } 实现的新实例。 

 public static T List T getList(int initialCapacity) { 

 return new ArrayList T (initialCapacity); 

 /** 

 * 用该方法来代替 [email protected] new ArrayList T ()} 方式获得新的 [email protected] java.util.List} 的实例对象。 

 * @param T [email protected] List T } 中保存的对象。 

 * @param c 其中的元素将存放在新的 [email protected] list} 中的 [email protected] collection}。 

 * @return 返回 [email protected] java.util.List T } 关于 [email protected] java.util.ArrayList T } 实现的新实例。 

 public static T List T getList(Collection ? extends T c) { 

 if (ObjectUtils.isNotEmpty(c)) 

 return new ArrayList T 

 return new ArrayList T 

 /** 

 * 用该方法来代替 [email protected] new LinkedList T ()} 方式获得新的 [email protected] java.util.List} 的实例对象。 

 * @param T [email protected] List T } 中保存的对象。 

 * @return 返回 [email protected] java.util.List T } 关于 [email protected] java.util.LinkedList T } 实现的新实例。 

 public static T List T getLinkedList() { 

 return new LinkedList T 

 /** 

 * 用该方法来代替 [email protected] new HashSet T ()} 方式获得新的 [email protected] java.util.Set} 的实例对象。 

 * @param T [email protected] Set T } 中保存的对象。 

 * @return 返回 [email protected] java.util.Set T } 关于 [email protected] java.util.HashSet T } 实现的新实例。 

 public static T Set T getHashSet() { 

 return new HashSet T 

 /** 

 * 用该方法来代替 [email protected] new HashSet T (int)} 方式获得新的 [email protected] java.util.Set} 的实例对象。 

 * @param T [email protected] Set T } 中保存的对象。 

 * @param initialCapacity 列表的初始容量。 

 * @return 返回 [email protected] java.util.Set T } 关于 [email protected] java.util.HashSet T } 实现的新实例。 

 public static T Set T getHashSet(int initialCapacity) { 

 return new HashSet T (initialCapacity); 

 /** 

 * 用该方法来代替 code new HashSet T (Collection ? extends T c) /code 方式获得新的 

 * [email protected] java.util.Set} 的实例对象。 

 * @param T [email protected] Set} 中保存的对象。 

 * @param c 其中的元素将存放在新的 [email protected] set} 中的 [email protected] collection}。 

 * @return 返回 [email protected] java.util.Set T } 关于 [email protected] java.util.HashSet T } 实现的新实例。 

 public static T Set T getHashSet(Collection ? extends T c) { 

 if (ObjectUtils.isEmpty(c)) 

 return new HashSet T 

 return new HashSet T 

 /** 

 * 用该方法来代替 [email protected] new TreeSet T ()} 方式获得新的 [email protected] java.util.Set} 的实例对象。 

 * @param T [email protected] Set T } 中保存的对象。 

 * @return 返回 [email protected] java.util.Set T } 关于 [email protected] java.util.TreeSet T } 实现的新实例。 

 public static T Set T getTreeSet() { 

 return new TreeSet T 

 /** 

 * 用该方法来代替 code new TreeSet T (Collection ? extends T c) /code 方式获得新的 

 * {@code java.util.Set} 的实例对象。 

 * @param T {@code Set} 中保存的对象。 

 * @param c 其中的元素将存放在新的 {@code set} 中的 {@code collection}。 

 * @return 返回 {@code java.util.Set T } 关于 {@code java.util.TreeSet T } 实现的新实例。 

 public static T Set T getTreeSet(Collection ? extends T c) { 

 if (ObjectUtils.isEmpty(c)) 

 return new TreeSet T 

 return new TreeSet T 

 /** 

 * 用该方法来代替 {@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)); 

}

10531.html

cjava