从http://www.360doc.com/content/08/1112/13/18042_1909885.shtml看到的,觉得很好,所以拿来转载一下,顺便给自己个link,里面还有其他精彩的[Jakarta Commons笔记]
[Jakarta Commons笔记] Commons Collections - Map组
接下来看Map组。
BidiMap
MultiMap
LazyMap
MapUtils
Commons Collections在java.util.Map的基础上扩展了很多接口和类,比较有代表性的是BidiMap、MultiMap和LazyMap。跟Bag和Buffer类似,Commons Collections也提供了一个MapUtils。
所谓BidiMap,直译就是双向Map,可以通过key找到value,也可以通过value找到key,这在我们日常的代码-名称匹配的时候很方便:因为我们除了需要通过代码找到名称之外,往往也需要处理用户输入的名称,然后获取其代码。需要注意的是BidiMap当中不光key不能重复,value也不可以。
所谓MultiMap,就是说一个key不在是简单的指向一个对象,而是一组对象,add()和remove()的时候跟普通的Map无异,只是在get()时返回一个Collection,利用MultiMap,我们就可以很方便的往一个key上放数量不定的对象,也就实现了一对多。
所谓LazyMap,意思就是这个Map中的键/值对一开始并不存在,当被调用到时才创建,这样的解释初听上去是不是有点不可思议?这样的LazyMap有用吗?我们这样来理解:我们需要一个Map,但是由于创建成员的方法很“重”(比如数据库访问),或者我们只有在调用get()时才知道如何创建,或者Map中出现的可能性很多很多,我们无法在get()之前添加所有可能出现的键/值对,或者任何其它解释得通的原因,我们觉得没有必要去初始化一个Map而又希望它可以在必要时自动处理数据生成的话,LazyMap就变得很有用了。
我们还是通过一个具体的例子来说明:
package sean.study.commons.collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.collections.BidiMap;
import org.apache.commons.collections.Factory;
import org.apache.commons.collections.MultiHashMap;
import org.apache.commons.collections.MultiMap;
import org.apache.commons.collections.bidimap.DualHashBidiMap;
import org.apache.commons.collections.map.LazyMap;
import org.apache.commons.lang.StringUtils;
public class MapUsage {
public static void main(String[] args) {
demoBidiMap();
demoMultiMap();
demoLazyMap();
}
public static void demoBidiMap() {
System.out.println(StringUtils.center(" demoBidiMap ", 40, "="));
BidiMap bidiMap = new DualHashBidiMap();
bidiMap.put("BJ", "Beijing");
bidiMap.put("SH", "Shanghai");
bidiMap.put("GZ", "Guangzhou");
bidiMap.put("CD", "Chengdu");
System.out.println("Key-Value: BJ = " + bidiMap.get("BJ"));
System.out.println("Value-Key: Chengdu = " + bidiMap.getKey("Chengdu"));
System.out.println(StringUtils.repeat("=", 40));
}
public static void demoMultiMap() {
System.out.println(StringUtils.center(" demoMultiMap ", 40, "="));
MultiMap multiMap = new MultiHashMap();
multiMap.put("Sean", "C/C++");
multiMap.put("Sean", "OO");
multiMap.put("Sean", "Java");
multiMap.put("Sean", ".NET");
multiMap.remove("Sean", "C/C++");
System.out.println("Sean's skill set: " + multiMap.get("Sean"));
System.out.println(StringUtils.repeat("=", 40));
}
public static void demoLazyMap() {
System.out.println(StringUtils.center(" demoLazyMap ", 40, "="));
// borrowed from Commons Collection's Javadoc
Factory factory = new Factory() {
public Object create() {
return new Date();
}
};
Map lazy = LazyMap.decorate(new HashMap(), factory);
System.out.println(lazy.get("NOW"));
System.out.println(StringUtils.repeat("=", 40));
}
}
以下是运行结果:
============= demoBidiMap ==============
Key-Value: BJ = Beijing
Value-Key: Chengdu = CD
========================================
============= demoMultiMap =============
Sean's skill set: [OO, Java, .NET]
========================================
============= demoLazyMap ==============
Wed Aug 03 12:44:56 CST 2005
========================================
简单说一下这个Factory,它是定义在org.apache.commons.collections包下面的一个接口,用于自定义对象的创建过程。这个有点像是后面我们要讲的Transformer的简化版本,但是也更直接也很好用,至少Commons Collections通过它向开发人员开放了一个可以方便控制对象创建细节的接口。
分享到:
相关推荐
apache-jakarta-commons-collections.jar apache-jakarta-commons-discovery.jar apache-jakarta-commons-email.jar apache-jakarta-commons-fileupload.jar apache-jakarta-commons-httpclient.jar apache-jakarta-...
jakarta-commons 相关依赖包,文件列表: commons-attributes-api.jar commons-attributes-compiler.jar commons-beanutils.jar commons-codec.jar commons-collections.jar commons-dbcp.jar commons-digester.jar ...
1. `commons-collections-3.1.jar`:这是Apache Commons Collections库的一个版本,它提供了大量的集合操作工具类和算法,包括对列表、映射、队列等数据结构的操作,以及一些实用的转换和比较方法。在DBCP中,这个库...
`Commons-collections-3.2-API.chm`文档详细列出了所有这些功能的API,帮助开发者理解和使用这些工具。 2. **Commons Configuration**: 这个库是为了处理配置文件而设计的,支持多种类型的配置源,如XML、属性...
【Jakarta Commons笔记】 Jakarta Commons是Apache软件基金会的一个项目集合,它提供了许多Java开发中常用的工具类和组件。这个项目旨在减少重复的工作,通过共享和重用代码,提高开发效率。Jakarta Commons包含了...
- 集合转换:将一个集合转换成另一个集合,如列表转数组、集合转 Map。 - 集合筛选:根据条件过滤集合元素。 - 集合操作:并集、交集、差集等。 - 排序:对集合进行定制排序。 ### 5. Commons Net Commons Net ...
commons-collections-3.2.1-bin.zip这三个要解压出jar包,其中commons-collections-3.2.1-bin.zip这个包解压后是一个bin,还需要再对bin解压,里面是jar,我下载也搞了一阵子,后来才发现这个jar包在bin里面。
《Jakarta Commons Cookbook》是Java开发领域中一本非常实用的指南,主要涵盖了Apache Jakarta Commons组件的使用技巧和最佳实践。这本书旨在帮助开发者更好地理解和利用Jakarta Commons库中的各种工具类和模块,...
jakarta commons-lang jakarta commons-beanutils jakarta commons-collections jakarta commons-logging ezmorph
DBCP(Database Connection Pool)是Apache Jakarta项目中的一个子项目,它利用了commons-pool对象池机制来实现数据库连接的复用,从而减少创建和释放数据库连接时的开销。Tomcat,一个广泛使用的Java应用服务器,...
### Apache Jakarta Commons 使用手册知识点详解 #### 一、概述 《Apache Jakarta Commons 使用手册》是一部详细介绍Apache Jakarta Commons项目下的各种Java组件的专业书籍。该书由Will Iverson编写,旨在为...
下载地址:http://jakarta.apache.org/commons/fileupload/ 2. commons-IO 1.3.1 包 下载地址:http://jakarta.apache.org/commons/io/ 3. Commons-BeanUtils 1.7 包 下载地址:...
《Jakarta Commons Cookbook》是Java开发者的一本重要参考资料,它主要涵盖了Apache Jakarta Commons项目中的各种组件和工具的使用方法。Apache Commons是Java开发中的一个关键部分,提供了许多实用且功能强大的类库...
Jakarta commons docs API CHM 格式带索引和全文搜索,方便携带和查询。 Jakarta commons 包含很多可复用的通用组件。 commons-attributes 让开发者可以使用 C# 或 .net 样式的 attributes, 是一种运行时的 api, ...
- `commons-collections.jar`:依赖于Apache Commons Collections库,提供了一些集合操作的高级功能,BeanUtils库在处理JavaBeans时可能会用到。 - `commons-lang.jar`:依赖于Apache Commons Lang库,提供了一些...
commons-email 提供一组用于发送Email的API,它基于Java Mail API基础之上并进行了简化 commons-exec 处理外部进程的执行或管理外部环境 commons-fileupload 使得在你可以在应用和Servlet中容易的加入强大和高性能...
《Jakarta.Commons.Cookbook》是一本专注于Apache Jakarta Commons组件使用的指南,它为开发者提供了大量实用的代码示例和技巧,帮助他们在Java应用程序开发中更有效地利用这些库。Apache Jakarta Commons是Apache...
本文将详细介绍几个常用的Apache Commons组件:commons-lang、commons-beanutils和commons-collections。 #### 1. Commons Lang Commons Lang库提供了对Java语言及其标准库的扩展,主要聚焦于字符串处理、对象操作...
在Java开发中,Jakarta Commons库提供了许多子项目,如IO、Lang、BeanUtils、Collections、Codec等,每个子项目都专注于特定的领域,如输入/输出操作、字符串处理、对象的创建和复制、集合的扩展以及编码解码等。...
2. Jakarta Commons Collections Commons Collections库为Java标准集合框架提供了扩展。它包含以下组件: - Bag:存储对象的集合,但对象可以出现多次。 - Buffer:提供队列、栈和缓冲区的实现。 - BiDiMap:双向...