- 浏览: 403713 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (99)
- Spring (14)
- Hibernate (2)
- Struts (0)
- Java (21)
- J2ee (1)
- JFreeChart (1)
- Tomcat (3)
- Eclipse (3)
- 项目日记 (2)
- Javascript (4)
- fckeditor (2)
- mysql (13)
- Powerdesigner (2)
- sql server 2005 (1)
- Css (1)
- jQuery (2)
- 架构 (4)
- 性能 (7)
- struts2 (1)
- LigerUI (1)
- ibatis (2)
- 数据库 (1)
- 职业发展 (3)
- maven (1)
- mybatis (1)
- 算法 (1)
- 项目经理 (2)
- hadoop-1.0 (2)
- hadoop1.0 (1)
- hadoop-2.0 (1)
- 网络安全 (5)
- 正则表达式 (1)
- 管理 (2)
- Redis (1)
- linux (4)
- infobright (1)
- CentOS (4)
- windows (1)
- 其他 (1)
- easyui (1)
- elasticsearch (0)
- 公司管理 (0)
最新评论
-
wangyudong:
由Spring Boot实现的微服务需要有比较好的工具去测试R ...
使用Spring Boot快速构建应用 -
masuweng:
<artifactId>maven-compile ...
使用Spring Boot快速构建应用 -
masuweng:
说明下<start-class>com.test. ...
使用Spring Boot快速构建应用 -
masuweng:
学习了,感谢了
使用Spring Boot快速构建应用 -
幽蓝星空:
执行mvn clean install spring-boot ...
使用myeclipse打包Spring Boot工程
Java 泛型集合工具类
- 博客分类:
- Java
package my.tools; 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> * 如果要获得一个 {@code Map<String, String>} 的对象,可以通过下面的方式实现: * {@literal Map<String, String> map = GenericUtils.getMap();}。但是不能直接作为参数使用,例如有这样一个方法: * {@literal 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 { /** * 用该方法来代替 {@code new HashMap<K, V>()} 方式获得新的 {@code java.util.Map} 的实例对象。 * * @param <K> {@code Map} 中的键对象。 * @param <V> {@code Map} 中的值对象。 * @return 返回 {@code java.util.Map<K, V>} 关于 {@code java.util.HashMap<K, V>} 实现的新实例。 */ public static <K, V> Map<K, V> getMap() { return new HashMap<K, V>(); } /** * 用该方法来代替 {@code new HashMap<K, V>(int)} 方式获得新的 {@code java.util.Map} 的实例对象。 * * @param <K> {@code Map} 中的键对象。 * @param <V> {@code Map} 中的值对象。 * @param initialCapacity 初始容量。 * @return 返回 {@code java.util.Map<K, V>} 关于 {@code java.util.HashMap<K, V>} 实现的新实例。 */ public static <K, V> Map<K, V> getMap(int initialCapacity) { return new HashMap<K, V>(initialCapacity); } /** * 用该方法来代替 {@code new ConcurrentHashMap<K, V>()} 方式获得新的 {@code java.util.Map} 的实例对象。 * * @param <K> {@code Map} 中的键对象。 * @param <V> {@code Map} 中的值对象。 * @return 返回 {@code java.util.Map<K, V>} 关于 * {@code java.util.concurrent.ConcurrentHashMap<K, V>} 实现的新实例。 */ public static <K, V> Map<K, V> getConcurrentMap() { return new ConcurrentHashMap<K, V>(); } /** * 用该方法来代替 {@code new ConcurrentHashMap<K, V>(int)} 方式获得新的 {@code java.util.Map} * 的实例对象。 * * @param <K> {@code Map} 中的键对象。 * @param <V> {@code Map} 中的值对象。 * @param initialCapacity 初始容量。 * @return 返回 {@code java.util.Map<K, V>} 关于 * {@code java.util.concurrent.ConcurrentHashMap<K, V>} 实现的新实例。 */ public static <K, V> Map<K, V> getConcurrentMap(int initialCapacity) { return new ConcurrentHashMap<K, V>(initialCapacity); } /** * 用该方法来代替 {@code new LinkedHashMap<K, V>()} 方式获得新的 {@code java.util.Map} 的实例对象。 * * @param <K> {@code Map} 中的键对象。 * @param <V> {@code Map} 中的值对象。 * @return 返回 {@code java.util.Map<K, V>} 关于 {@code java.util.LinkedHashMap<K, V>} * 实现的新实例。 */ public static <K, V> Map<K, V> getLinkedMap() { return new LinkedHashMap<K, V>(); } /** * 用该方法来代替 {@code new LinkedHashMap<K, V>(int)} 方式获得新的 {@code java.util.Map} 的实例对象。 * * @param <K> {@code Map} 中的键对象。 * @param <V> {@code Map} 中的值对象。 * @param initialCapacity 初始容量。 * @return 返回 {@code java.util.Map<K, V>} 关于 {@code java.util.LinkedHashMap<K, V>} * 实现的新实例。 */ public static <K, V> Map<K, V> getLinkedMap(int initialCapacity) { return new LinkedHashMap<K, V>(initialCapacity); } /** * 用该方法来代替 {@code new TreeMap<K, V>()} 方式获得新的 {@code java.util.Map} 的实例对象。 * * @param <K> {@code Map} 中的键对象。 * @param <V> {@code Map} 中的值对象。 * @return 返回 {@code java.util.Map<K, V>} 关于 {@code java.util.TreeMap<K, V>} 实现的新实例。 */ public static <K, V> Map<K, V> getTreeMap() { return new TreeMap<K, V>(); } /** * 用该方法来代替 {@code new ConcurrentHashMap<K, V>()} 方式获得新的 * {@code java.util.concurrent.ConcurrentHashMap} 的实例对象。 * * @param <K> {@code Map} 中的键对象。 * @param <V> {@code Map} 中的值对象。 * @return 返回 {@code java.util.concurrent.ConcurrentMap<K, V>} 关于 * {@code java.util.concurrent.ConcurrentHashMap<K, V>} 实现的新实例。 */ public static <K, V> ConcurrentMap<K, V> getConcurrentHashMap() { return new ConcurrentHashMap<K, V>(); } /** * 用该方法来代替 {@code new ConcurrentHashMap<K, V>(int)} 方式获得新的 * {@code java.util.concurrent.ConcurrentHashMap} 的实例对象。 * * @param <K> {@code Map} 中的键对象。 * @param <V> {@code Map} 中的值对象。 * @param initialCapacity 初始容量。 * @return 返回 {@code java.util.concurrent.ConcurrentMap<K, V>} 关于 * {@code java.util.concurrent.ConcurrentHashMap<K, V>} 实现的新实例。 */ public static <K, V> ConcurrentMap<K, V> getConcurrentHashMap(int initialCapacity) { return new ConcurrentHashMap<K, V>(initialCapacity); } /** * 用该方法来代替 {@code new ArrayList<T>()} 方式获得新的 {@code java.util.List} 的实例对象。 * * @param <T> {@code List<T>} 中保存的对象。 * @return 返回 {@code java.util.List<T>} 关于 {@code java.util.ArrayList<T>} 实现的新实例。 */ public static <T> List<T> getList() { return new ArrayList<T>(); } /** * 用该方法来代替 {@code new ArrayList<T>(int)} 方式获得新的 {@code java.util.List} 的实例对象。 * * @param <T> {@code List<T>} 中保存的对象。 * @param initialCapacity 列表的初始容量。 * @return 返回 {@code java.util.List<T>} 关于 {@code java.util.ArrayList<T>} 实现的新实例。 */ public static <T> List<T> getList(int initialCapacity) { return new ArrayList<T>(initialCapacity); } /** * 用该方法来代替 {@code new ArrayList<T>()} 方式获得新的 {@code java.util.List} 的实例对象。 * * @param <T> {@code List<T>} 中保存的对象。 * @param c 其中的元素将存放在新的 {@code list} 中的 {@code collection}。 * @return 返回 {@code java.util.List<T>} 关于 {@code 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>(); } /** * 用该方法来代替 {@code new LinkedList<T>()} 方式获得新的 {@code java.util.List} 的实例对象。 * * @param <T> {@code List<T>} 中保存的对象。 * @return 返回 {@code java.util.List<T>} 关于 {@code java.util.LinkedList<T>} 实现的新实例。 */ public static <T> List<T> getLinkedList() { return new LinkedList<T>(); } /** * 用该方法来代替 {@code new HashSet<T>()} 方式获得新的 {@code java.util.Set} 的实例对象。 * * @param <T> {@code Set<T>} 中保存的对象。 * @return 返回 {@code java.util.Set<T>} 关于 {@code java.util.HashSet<T>} 实现的新实例。 */ public static <T> Set<T> getHashSet() { return new HashSet<T>(); } /** * 用该方法来代替 {@code new HashSet<T>(int)} 方式获得新的 {@code java.util.Set} 的实例对象。 * * @param <T> {@code Set<T>} 中保存的对象。 * @param initialCapacity 列表的初始容量。 * @return 返回 {@code java.util.Set<T>} 关于 {@code 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> 方式获得新的 * {@code java.util.Set} 的实例对象。 * * @param <T> {@code Set} 中保存的对象。 * @param c 其中的元素将存放在新的 {@code set} 中的 {@code collection}。 * @return 返回 {@code java.util.Set<T>} 关于 {@code 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); } /** * 用该方法来代替 {@code new TreeSet<T>()} 方式获得新的 {@code java.util.Set} 的实例对象。 * * @param <T> {@code Set<T>} 中保存的对象。 * @return 返回 {@code java.util.Set<T>} 关于 {@code 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>(c); } /** * 用该方法来代替 {@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)); } }
发表评论
-
Apache HttpClient Examples
2015-05-06 15:25 1986String url = "http://www ... -
java使用IO流进行文件的合并
2014-12-16 11:44 2157package chapter8.file; imp ... -
为什么谷歌要执行严格的代码编写规范
2014-09-02 13:51 923本篇是谷歌是如何做代码审查的的续篇。 我们在谷歌所做事情中 ... -
垃圾回收调优及JVM参数详解
2014-07-18 17:52 1734一、常用JVM配置参数 1.1基本参数 -client ... -
为何要在Java中使用内存映射文件(Memory Mapped File)或者MappedByteBuffer
2014-06-06 00:21 3166尽管从JDK 1.4版本开始,Java内存映射文件(Memo ... -
Java 中使用内存映射文件需要考虑的 10 个问题
2014-06-06 00:18 622java中的内存映射IO ... -
Annotation的优缺点-和配置文件比较
2014-05-06 18:22 1297a. 配置(配置文件,con ... -
shell/cmd 获取System.exit(); 返回值
2014-04-29 11:28 3791windows cmd: java ... -
java代码片段
2013-12-20 10:59 820使用NIO进行快速的文件拷贝 public ... -
Java IO流分析整理
2013-12-20 10:19 926ava中的流,可以从不同的角度进行分类。 按照数据流的方向 ... -
Java-UrlRewrite中文官方文档
2013-07-14 18:40 1919安装 1. 下载jar包, 并加入到WEB-INF/ ... -
java的8种排序
2013-03-18 09:58 11368种排序之间的关系: ... -
使用FileReader和FileWriter读取写入文件内容
2012-04-09 11:49 2367java 中的字节流不能直接操作Unicode字符,要想直接操 ... -
System.out.println与System.err.println的区别
2012-04-06 19:49 2657我在学习osworkflow时,同时使用了System.out ... -
Java获取IP地址:request.getRemoteAddr()警惕
2009-11-05 17:03 6619项目中需要和第三方平台接口,加了来源IP鉴权功能,测试时发现没 ... -
Integer比较
2009-05-18 16:08 3066例如:两个对象里面都有一个方法为getInteger()的方法 ... -
Java和PHP在Web开发方面的比较
2009-05-01 12:39 2733比较PHP和JSP这两个Web开发技术,在目前的情况是其实是比 ... -
创建J2EE 5.0工程后,JSTL不能使用解决方法
2009-01-06 17:21 5662原因:MyEclipse 创建 j2ee5.0工程的时候把JS ... -
新版JUnit 4.0 抢先体验
2008-04-03 13:51 1281新版JUnit 4.0 抢先体验 ... -
VO与PO之间的转换代码
2008-03-28 17:53 2509import java.beans.Property ...
相关推荐
总的来说,Java泛型集合和集合框架提供了强大的数据存储和处理能力,而`Collection`接口作为基础,连接了各种集合类型。了解并熟练掌握这些概念和用法,对于提高Java编程效率和代码质量至关重要。
总之,Java泛型集合是提高代码质量和效率的重要工具,它强化了类型系统,使开发者能够编写更安全、更健壮的代码,同时降低了潜在的bug风险。理解和熟练掌握泛型集合的使用,对于Java程序员来说至关重要。
6. **Collections**: 这是一个包含各种集合操作的工具类,如排序、查找、翻转等。提供的算法类包括`sort()`, `binarySearch()`, `reverse()`, `shuffle()`等。 泛型是Java中处理类型安全的一种方式,允许我们在类、...
* 工具类:泛型可以用于工具类中,例如工具类的静态方法可以使用泛型。 五、结论 泛型是Java编程语言中的一种重要特性,它可以提高代码的灵活性和可读性。通过使用泛型,我们可以编写更加灵活和可维护的代码。此外...
8. **实用工具类**:如Arrays、Collections和Guava库中的工具类,它们提供了丰富的静态方法来处理集合。 通过阅读"Java Generics and Collections",开发者不仅可以掌握Java泛型和集合的基本使用,还能深入了解它们...
在实际开发中,泛型可以用于创建通用的工具类,例如`Collections.sort()`方法,它可以对任何实现了`Comparable`接口的列表进行排序。泛型也可以应用于数据结构,如`HashMap`和`LinkedList`,提高容器的安全性和效率...
Java泛型是Java编程语言中的一个关键特性,它在2004年随着Java SE 5.0的发布而引入,极大地增强了代码的类型安全性和重用...Java泛型技术的不断发展和完善,也为Java程序员提供了强大的工具来应对复杂的数据处理场景。
总之,Java泛型和集合是提高代码质量和效率的关键工具,理解并熟练掌握它们对于成为一名优秀的Java开发者至关重要。通过深入学习本书和相关代码示例,你将能够更好地利用这些特性来编写更安全、更高效的代码。
Java泛型是Java语言中的一种机制,可以用来约束集合中的元素类型,提高代码的可读性和安全性。下面将对Java泛型进行详细的介绍。 一、泛型概述 泛型是Java 5中引入的一种机制,用于解决Java中集合类库中的类型安全...
这个"java泛型Demo"可能包含了一些具体的例子,如创建泛型类、泛型方法的使用,以及如何通过泛型处理集合。通过这些示例,你可以更直观地理解泛型的工作原理和实际应用。 总之,Java泛型是提高代码质量、安全性和...
在Java编程语言中,自定义泛型集合是一个重要的概念,它允许我们创建具有类型安全性的容器类,以存储特定类型的对象。泛型是Java SE 5.0引入的一个特性,目的是提高代码的类型安全性,减少类转换异常,并提供更好的...
Java泛型是Java编程语言中的一个关键特性,它在2004年随着JDK 5.0的发布被引入,极大地增强了代码的类型安全性和重用性。本篇文章将带你入门Java泛型,通过实例深入理解其核心概念。 1. **泛型的基本概念** - 泛型...
- Java泛型在编译后会进行类型擦除,这意味着在运行时,所有的泛型类型信息都会被替换为它们的边界类型或`Object`。因此,泛型并不改变对象的实际类型,仅在编译时提供类型检查。 6. **泛型与集合** - Java集合...
Java泛型是Java SE 5.0引入的一个重要特性,极大地提高了代码的类型安全性和重用性。在本文中,我们将深入探讨Java泛型的进阶概念,包括通配符、边界、类型擦除以及在实际开发中的应用。 1. 通配符 通配符在Java...
1. **类型擦除**:Java泛型在编译后会被擦除,这意味着在运行时,泛型类和非泛型类是相同的。类型参数被替换为它们的边界类型(通常是`Object`)。因此,泛型的主要优势在于编译时的检查,而不是运行时的性能提升。 ...
Guava是Google提供的开源Java库,它包含了大量有用和高效的工具类,例如用于集合操作的工具类,它简化了常见的集合操作,提高了代码的可读性和可维护性。Apache Commons也是一个流行的开源Java库,它提供了很多实用...
总的来说,Java泛型是一个强大的工具,它提高了代码的可读性、类型安全性,并降低了运行时错误的可能性。通过理解和熟练使用泛型,开发者可以编写出更高效、更少bug的Java应用程序。在实际开发中,尤其是在处理数据...
本文将深入探讨Java泛型类型擦除的概念,并介绍在类型擦除后,为了保持泛型的安全性和便利性,Java设计者所采取的一些补偿机制。 1. **类型擦除**: - 在编译期间,所有的泛型类型信息都会被替换为它们的实际类型...
Java泛型与集合框架是Java编程中至关重要的概念,它们极大地增强了代码的可读性、类型安全性以及效率。泛型是Java 5引入的新特性,主要用于集合类,它允许在编译时进行类型检查,避免了运行时的类型转换异常。 泛型...