代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
Java集合工具类
作者:
damooo
/ 发布于
2011/6/22
/
976
泛型集合工具类,用于便捷快速的定义、操作集合。包含Set的交集、并集、差集、补集等操作。
<div>package my.tools;</div> 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;</div> <div>/** * 包含获得各种集合对象的常用方法的泛型工具类。 * * 如果要获得一个 <a href="mailto:{@code">{@code</a> Map<String, String>} 的对象,可以通过下面的方式实现: * <a href="mailto:{@literal">{@literal</a> Map<String, String> map = GenericUtils.getMap();}。但是不能直接作为参数使用,例如有这样一个方法: * <a href="mailto:{@literal">{@literal</a> setInfo(Map<String, String>)},不能直接这样调用:<s> * setInfo(GenericUtils.getMap())</s> * * * @author Fuchun * @version $Id: GenericUtils.java 4754 2011-03-26 19:50 fuchun $ */ public class GenericUtils {</div> <div> /** * 用该方法来代替 <a href="mailto:{@code">{@code</a> new HashMap<K, V>()} 方式获得新的 <a href="mailto:{@code">{@code</a> java.util.Map} 的实例对象。 * * @param <K> <a href="mailto:{@code">{@code</a> Map} 中的键对象。 * @param <V> <a href="mailto:{@code">{@code</a> Map} 中的值对象。 * @return 返回 <a href="mailto:{@code">{@code</a> java.util.Map<K, V>} 关于 <a href="mailto:{@code">{@code</a> java.util.HashMap<K, V>} 实现的新实例。 */ public static <K, V> Map<K, V> getMap() { return new HashMap<K, V>(); } <div> /** * 用该方法来代替 <a href="mailto:{@code">{@code</a> new HashMap<K, V>(int)} 方式获得新的 <a href="mailto:{@code">{@code</a> java.util.Map} 的实例对象。 * * @param <K> <a href="mailto:{@code">{@code</a> Map} 中的键对象。 * @param <V> <a href="mailto:{@code">{@code</a> Map} 中的值对象。 * @param initialCapacity 初始容量。 * @return 返回 <a href="mailto:{@code">{@code</a> java.util.Map<K, V>} 关于 <a href="mailto:{@code">{@code</a> java.util.HashMap<K, V>} 实现的新实例。 */ public static <K, V> Map<K, V> getMap(int initialCapacity) { return new HashMap<K, V>(initialCapacity); } <div> /** * 用该方法来代替 <a href="mailto:{@code">{@code</a> new ConcurrentHashMap<K, V>()} 方式获得新的 <a href="mailto:{@code">{@code</a> java.util.Map} 的实例对象。 * * @param <K> <a href="mailto:{@code">{@code</a> Map} 中的键对象。 * @param <V> <a href="mailto:{@code">{@code</a> Map} 中的值对象。 * @return 返回 <a href="mailto:{@code">{@code</a> java.util.Map<K, V>} 关于 * <a href="mailto:{@code">{@code</a> java.util.concurrent.ConcurrentHashMap<K, V>} 实现的新实例。 */ public static <K, V> Map<K, V> getConcurrentMap() { return new ConcurrentHashMap<K, V>(); } <div> /** * 用该方法来代替 <a href="mailto:{@code">{@code</a> new ConcurrentHashMap<K, V>(int)} 方式获得新的 <a href="mailto:{@code">{@code</a> java.util.Map} * 的实例对象。 * * @param <K> <a href="mailto:{@code">{@code</a> Map} 中的键对象。 * @param <V> <a href="mailto:{@code">{@code</a> Map} 中的值对象。 * @param initialCapacity 初始容量。 * @return 返回 <a href="mailto:{@code">{@code</a> java.util.Map<K, V>} 关于 * <a href="mailto:{@code">{@code</a> java.util.concurrent.ConcurrentHashMap<K, V>} 实现的新实例。 */ public static <K, V> Map<K, V> getConcurrentMap(int initialCapacity) { return new ConcurrentHashMap<K, V>(initialCapacity); } <div> /** * 用该方法来代替 <a href="mailto:{@code">{@code</a> new LinkedHashMap<K, V>()} 方式获得新的 <a href="mailto:{@code">{@code</a> java.util.Map} 的实例对象。 * * @param <K> <a href="mailto:{@code">{@code</a> Map} 中的键对象。 * @param <V> <a href="mailto:{@code">{@code</a> Map} 中的值对象。 * @return 返回 <a href="mailto:{@code">{@code</a> java.util.Map<K, V>} 关于 <a href="mailto:{@code">{@code</a> java.util.LinkedHashMap<K, V>} * 实现的新实例。 */ public static <K, V> Map<K, V> getLinkedMap() { return new LinkedHashMap<K, V>(); } <div> /** * 用该方法来代替 <a href="mailto:{@code">{@code</a> new LinkedHashMap<K, V>(int)} 方式获得新的 <a href="mailto:{@code">{@code</a> java.util.Map} 的实例对象。 * * @param <K> <a href="mailto:{@code">{@code</a> Map} 中的键对象。 * @param <V> <a href="mailto:{@code">{@code</a> Map} 中的值对象。 * @param initialCapacity 初始容量。 * @return 返回 <a href="mailto:{@code">{@code</a> java.util.Map<K, V>} 关于 <a href="mailto:{@code">{@code</a> java.util.LinkedHashMap<K, V>} * 实现的新实例。 */ public static <K, V> Map<K, V> getLinkedMap(int initialCapacity) { return new LinkedHashMap<K, V>(initialCapacity); } <div> /** * 用该方法来代替 <a href="mailto:{@code">{@code</a> new TreeMap<K, V>()} 方式获得新的 <a href="mailto:{@code">{@code</a> java.util.Map} 的实例对象。 * * @param <K> <a href="mailto:{@code">{@code</a> Map} 中的键对象。 * @param <V> <a href="mailto:{@code">{@code</a> Map} 中的值对象。 * @return 返回 <a href="mailto:{@code">{@code</a> java.util.Map<K, V>} 关于 <a href="mailto:{@code">{@code</a> java.util.TreeMap<K, V>} 实现的新实例。 */ public static <K, V> Map<K, V> getTreeMap() { return new TreeMap<K, V>(); } <div> /** * 用该方法来代替 <a href="mailto:{@code">{@code</a> new ConcurrentHashMap<K, V>()} 方式获得新的 * <a href="mailto:{@code">{@code</a> java.util.concurrent.ConcurrentHashMap} 的实例对象。 * * @param <K> <a href="mailto:{@code">{@code</a> Map} 中的键对象。 * @param <V> <a href="mailto:{@code">{@code</a> Map} 中的值对象。 * @return 返回 <a href="mailto:{@code">{@code</a> java.util.concurrent.ConcurrentMap<K, V>} 关于 * <a href="mailto:{@code">{@code</a> java.util.concurrent.ConcurrentHashMap<K, V>} 实现的新实例。 */ public static <K, V> ConcurrentMap<K, V> getConcurrentHashMap() { return new ConcurrentHashMap<K, V>(); } <div> /** * 用该方法来代替 <a href="mailto:{@code">{@code</a> new ConcurrentHashMap<K, V>(int)} 方式获得新的 * <a href="mailto:{@code">{@code</a> java.util.concurrent.ConcurrentHashMap} 的实例对象。 * * @param <K> <a href="mailto:{@code">{@code</a> Map} 中的键对象。 * @param <V> <a href="mailto:{@code">{@code</a> Map} 中的值对象。 * @param initialCapacity 初始容量。 * @return 返回 <a href="mailto:{@code">{@code</a> java.util.concurrent.ConcurrentMap<K, V>} 关于 * <a href="mailto:{@code">{@code</a> java.util.concurrent.ConcurrentHashMap<K, V>} 实现的新实例。 */ public static <K, V> ConcurrentMap<K, V> getConcurrentHashMap(int initialCapacity) { return new ConcurrentHashMap<K, V>(initialCapacity); } <div> /** * 用该方法来代替 <a href="mailto:{@code">{@code</a> new ArrayList<T>()} 方式获得新的 <a href="mailto:{@code">{@code</a> java.util.List} 的实例对象。 * * @param <T> <a href="mailto:{@code">{@code</a> List<T>} 中保存的对象。 * @return 返回 <a href="mailto:{@code">{@code</a> java.util.List<T>} 关于 <a href="mailto:{@code">{@code</a> java.util.ArrayList<T>} 实现的新实例。 */ public static <T> List<T> getList() { return new ArrayList<T>(); } <div> /** * 用该方法来代替 <a href="mailto:{@code">{@code</a> new ArrayList<T>(int)} 方式获得新的 <a href="mailto:{@code">{@code</a> java.util.List} 的实例对象。 * * @param <T> <a href="mailto:{@code">{@code</a> List<T>} 中保存的对象。 * @param initialCapacity 列表的初始容量。 * @return 返回 <a href="mailto:{@code">{@code</a> java.util.List<T>} 关于 <a href="mailto:{@code">{@code</a> java.util.ArrayList<T>} 实现的新实例。 */ public static <T> List<T> getList(int initialCapacity) { return new ArrayList<T>(initialCapacity); } <div> /** * 用该方法来代替 <a href="mailto:{@code">{@code</a> new ArrayList<T>()} 方式获得新的 <a href="mailto:{@code">{@code</a> java.util.List} 的实例对象。 * * @param <T> <a href="mailto:{@code">{@code</a> List<T>} 中保存的对象。 * @param c 其中的元素将存放在新的 <a href="mailto:{@code">{@code</a> list} 中的 <a href="mailto:{@code">{@code</a> collection}。 * @return 返回 <a href="mailto:{@code">{@code</a> java.util.List<T>} 关于 <a href="mailto:{@code">{@code</a> java.util.ArrayList<T>} 实现的新实例。 */ public static <T> List<T> getList(Collection<? extends T> c) { if (ObjectUtils.isNotEmpty(c)) return new ArrayList<T>(c); return new ArrayList<T>(); } <div> /** * 用该方法来代替 <a href="mailto:{@code">{@code</a> new LinkedList<T>()} 方式获得新的 <a href="mailto:{@code">{@code</a> java.util.List} 的实例对象。 * * @param <T> <a href="mailto:{@code">{@code</a> List<T>} 中保存的对象。 * @return 返回 <a href="mailto:{@code">{@code</a> java.util.List<T>} 关于 <a href="mailto:{@code">{@code</a> java.util.LinkedList<T>} 实现的新实例。 */ public static <T> List<T> getLinkedList() { return new LinkedList<T>(); } <div> /** * 用该方法来代替 <a href="mailto:{@code">{@code</a> new HashSet<T>()} 方式获得新的 <a href="mailto:{@code">{@code</a> java.util.Set} 的实例对象。 * * @param <T> <a href="mailto:{@code">{@code</a> Set<T>} 中保存的对象。 * @return 返回 <a href="mailto:{@code">{@code</a> java.util.Set<T>} 关于 <a href="mailto:{@code">{@code</a> java.util.HashSet<T>} 实现的新实例。 */ public static <T> Set<T> getHashSet() { return new HashSet<T>(); } <div> /** * 用该方法来代替 <a href="mailto:{@code">{@code</a> new HashSet<T>(int)} 方式获得新的 <a href="mailto:{@code">{@code</a> java.util.Set} 的实例对象。 * * @param <T> <a href="mailto:{@code">{@code</a> Set<T>} 中保存的对象。 * @param initialCapacity 列表的初始容量。 * @return 返回 <a href="mailto:{@code">{@code</a> java.util.Set<T>} 关于 <a href="mailto:{@code">{@code</a> java.util.HashSet<T>} 实现的新实例。 */ public static <T> Set<T> getHashSet(int initialCapacity) { return new HashSet<T>(initialCapacity); } <div> /** * 用该方法来代替 new HashSet<T>(Collection<? extends T> c) 方式获得新的 * <a href="mailto:{@code">{@code</a> java.util.Set} 的实例对象。 * * @param <T> <a href="mailto:{@code">{@code</a> Set} 中保存的对象。 * @param c 其中的元素将存放在新的 <a href="mailto:{@code">{@code</a> set} 中的 <a href="mailto:{@code">{@code</a> collection}。 * @return 返回 <a href="mailto:{@code">{@code</a> java.util.Set<T>} 关于 <a href="mailto:{@code">{@code</a> 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>(c); } <div> /** * 用该方法来代替 <a href="mailto:{@code">{@code</a> new TreeSet<T>()} 方式获得新的 <a href="mailto:{@code">{@code</a> java.util.Set} 的实例对象。 * * @param <T> <a href="mailto:{@code">{@code</a> Set<T>} 中保存的对象。 * @return 返回 <a href="mailto:{@code">{@code</a> java.util.Set<T>} 关于 <a href="mailto:{@code">{@code</a> java.util.TreeSet<T>} 实现的新实例。 */ public static <T> Set<T> getTreeSet() { return new TreeSet<T>(); } <div> /** * 用该方法来代替 new TreeSet<T>(Collection<? extends T> c) 方式获得新的 * <a href="mailto:{@code">{@code</a> java.util.Set} 的实例对象。 * * @param <T> <a href="mailto:{@code">{@code</a> Set} 中保存的对象。 * @param c 其中的元素将存放在新的 <a href="mailto:{@code">{@code</a> set} 中的 <a href="mailto:{@code">{@code</a> collection}。 * @return 返回 <a href="mailto:{@code">{@code</a> java.util.Set<T>} 关于 <a href="mailto:{@code">{@code</a> 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>(c); } <div> /** * 用该方法来代替 <a href="mailto:{@code">{@code</a> new LinkedList<E>()} 方式获得新的 <a href="mailto:{@code">{@code</a> java.util.Queue} 的实例对象。 * * @param <E> <a href="mailto:{@code">{@code</a> Queue<E>} 中保存的对象。 * @return 返回 <a href="mailto:{@code">{@code</a> java.util.Queue<E>} 关于 <a href="mailto:{@code">{@code</a> java.util.LinkedList<E>} 实现的新实例。 */ public static <E> Queue<E> getQueue() { return new LinkedList<E>(); } <div> /** * 合并两个有相同元素类型的 <a href="mailto:{@code">{@code</a> java.util.Set}。 * <ul> * <li>{@code setA == null && setB == null} --> 返回 <a href="mailto:{@link">{@link</a> #getHashSet()}。</li> * <li>{@code setA != null && setB == null} --> 返回 <a href="mailto:{@code">{@code</a> setA}。</li> * <li>{@code setA == null && setB != null} --> 返回 <a href="mailto:{@code">{@code</a> setB}。</li> * <li>{@code setA != null && setB != null} --> 返回 <a href="mailto:{@code">{@code</a> setA} 和 <a href="mailto:{@code">{@code</a> setB} 的并集。 * </li> * </ul> * * @param <T> <a href="mailto:{@code">{@code</a> Set} 中保存的对象。 * @param setA 第一个 <a href="mailto:{@code">{@code</a> Set}。 * @param setB 第二个 <a href="mailto:{@code">{@code</a> Set}。 * @return 返回 <a href="mailto:{@code">{@code</a> setA} 和 <a href="mailto:{@code">{@code</a> 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; } <div> /** * 取两个有相同元素类型的 <a href="mailto:{@code">{@code</a> java.util.Set} 的交集,即公共部份的新的 <a href="mailto:{@code">{@code</a> java.util.Set}。 * <ul> * <li>{@code setA == null && setB == null} --> 返回 <a href="mailto:{@code">{@code</a> null}。</li> * <li>{@code setA != null && setB == null} --> 返回 <a href="mailto:{@code">{@code</a> null}。</li> * <li>{@code setA == null && setB != null} --> 返回 <a href="mailto:{@code">{@code</a> null}。</li> * <li>{@code setA != null && setB != null} --> 返回 <a href="mailto:{@code">{@code</a> setA} 和 <a href="mailto:{@code">{@code</a> setB} 的交集。 * </li> * </ul> * * @param <T> <a href="mailto:{@code">{@code</a> Set} 中保存的对象。 * @param setA 第一个 <a href="mailto:{@code">{@code</a> Set}。 * @param setB 第二个 <a href="mailto:{@code">{@code</a> Set}。 * @return 返回 <a href="mailto:{@code">{@code</a> setA} 和 <a href="mailto:{@code">{@code</a> 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; } <div> /** * 移除 <a href="mailto:{@code">{@code</a> setA} 中那些包含在 <a href="mailto:{@code">{@code</a> setB} 中的元素。 * 此方法不会修改 <a href="mailto:{@code">{@code</a> setA},只是复制一份作相应操作,返回的是全新的 <a href="mailto:{@code">{@code</a> Set} 对象。 * <ul> * <li>{@code setA == null} --> 返回 <a href="mailto:{@code">{@code</a> null}。</li> * <li>{@code setB == null} --> 返回 <a href="mailto:{@code">{@code</a> setA}。</li> * <li>{@code setA != null && setB != null} --> 返回 <a href="mailto:{@code">{@code</a> setA} 和 <a href="mailto:{@code">{@code</a> setB} * 的不对称差集。</li> * </ul> * * @param <T> <a href="mailto:{@code">{@code</a> Set} 中保存的对象。 * @param setA 第一个 <a href="mailto:{@code">{@code</a> Set}。 * @param setB 第二个 <a href="mailto:{@code">{@code</a> Set}。 * @return 返回 <a href="mailto:{@code">{@code</a> setA} 和 <a href="mailto:{@code">{@code</a> 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; } <div> /** * 取两个有相同元素类型的 <a href="mailto:{@code">{@code</a> java.util.Set} 的补集。 * * @param <T> <a href="mailto:{@code">{@code</a> Set} 中保存的对象。 * @param setA 第一个 <a href="mailto:{@code">{@code</a> Set}。 * @param setB 第二个 <a href="mailto:{@code">{@code</a> Set}。 * @return 返回 <a href="mailto:{@code">{@code</a> setA} 和 <a href="mailto:{@code">{@code</a> setB} 的补集。 */ public static <T> Set<T> complementHashSet(Set<T> setA, Set<T> setB) { return differenceHashSet(unionHashSet(setA, setB), intersectHashSet(setA, setB)); } }
试试其它关键字
集合工具类
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
damooo
贡献的其它代码
(
4
)
.
大整数相加
.
PHP计算器(工厂模式)
.
Java集合工具类
.
对JPA的简单封装
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3