`
rich8w
  • 浏览: 178543 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

[Jakarta Commons笔记] Commons Collections - Map组(转载)

阅读更多
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通过它向开发人员开放了一个可以方便控制对象创建细节的接口。
分享到:
评论
1 楼 rich8w 2010-03-28  
[Jakarta Commons笔记] Commons Collections - Transformer组
http://www.360doc.com/content/08/1112/13/18042_1909825.shtml

相关推荐

    jakarta-commons 相关依赖包

    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 ...

    apache-jakarta旗下的所有开源项目jar文件

    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-...

    json-lib 2.3,

    commons-collections-3.2.1-bin.zip这三个要解压出jar包,其中commons-collections-3.2.1-bin.zip这个包解压后是一个bin,还需要再对bin解压,里面是jar,我下载也搞了一阵子,后来才发现这个jar包在bin里面。

    json-lib类库

    jakarta commons-lang jakarta commons-beanutils jakarta commons-collections jakarta commons-logging ezmorph

    commons-beanutils-1.8.3.jar

    下载地址:http://jakarta.apache.org/commons/fileupload/ 2. commons-IO 1.3.1 包 下载地址:http://jakarta.apache.org/commons/io/ 3. Commons-BeanUtils 1.7 包 下载地址:...

    Apache Jakarta Commons 使用手册

    介绍了Apache Jakarta Commons 项目下Java组件,如FileUpload, HttpClient, DBCP,BeanUtils,Logging,Lang, 以及 Collections,Codec等,是学习和使用Apache Jakarta Commons良好的参考使用手册。

    Jakarta commons docs API CHM 格式

    Jakarta commons docs API CHM 格式带索引和全文搜索,方便携带和查询。 Jakarta commons 包含很多可复用的通用组件。 commons-attributes 让开发者可以使用 C# 或 .net 样式的 attributes, 是一种运行时的 api, ...

    Apache commons jar包常用类讲解--Jakarta Commons 学习.pdf

    Apache 常用jar包讲解--包括commons-lang.jar commons-beanutils.jar commons-collections 等

    c3p0-0.9.1.2等等

    commons-collections-2.1.1 commons-dbcp commons-fileupload commons-httpclient commons-io commons-lang commons-logging commons-logging-1.0.4 commons-pool dom4j-1.6.1 dwr ehcache-1.1 hibernate3 itext-1.3...

    json相关包及依赖包

    jakarta commons-collections 3.2.1 jakarta commons-logging 1.1.1 ezmorph 1.0.6 依赖包的下载地址: ezmorph 1.0.6: http://ezmorph.sourceforge.net/ http://morph.sourceforge.net/ jakarta commons-lang 2.4 ...

    开源框架jar包(百度云盘)

     · commons-collections-3.2.1-src.zip  · commons-codec-1.4-src.zip  · commons-beanutils-1.8.0-bin.zip  · commons-beanutils-1.8.0-src.zip  · commons-collections-3.2.1-bin.zip SSH框架  · ...

    JSON的JAR包及相关包

    jakarta commons-collections 3.2 jakarta commons-logging 1.1.1 ezmorph 1.0.6 我搜集到一些最新的包,个别版本要比这里面的高一点 jakarta commons-lang 2.5 jakarta commons-beanutils 1.8.2 jakarta ...

    json全套架包

    在使用json时所需要的架包,包括了】jakarta commons-lang 2.5 jakarta commons-beanutils 1.8.0 jakarta commons-collections 3.2.1 jakarta commons-logging 1.1.1 ezmorph 1.0.6

    apache-commons源码及jar文件

    Commons-Collections 提供一个类包来扩展和增加标准的 Java Collection框架 Configuration Commons-Configuration 工具对各种各式的配置和参考文件提供读取帮助. Daemon 一种 unix-daemon-like java 代码的替代...

    比较全面的:Jakarta-commons jar包(附: chm参考手册 & 资源简介)

    commons-email 提供一组用于发送Email的API,它基于Java Mail API基础之上并进行了简化 commons-exec 处理外部进程的执行或管理外部环境 commons-fileupload 使得在你可以在应用和Servlet中容易的加入强大和高性能...

    net.sf.josn 以及相关依赖文件

    json-lib-2.4-jdk15.jar 以及相关依赖包 jakarta commons-lang-2.5.jar jakarta commons-beanutils-1.8.3.jar ...jakarta commons-collections-3.2.1.jar jakarta commons-logging-1.1.3.jar ezmorph-1.0.6.jar

    JSONObject所必须的6个包

    jakarta commons-lang 2.5 jakarta commons-beanutils 1.8.0 jakarta commons-collections 3.2.1 jakarta commons-logging 1.1.1 ezmorph 1.0.6

    JSON java依赖包

    jakarta commons-lang 2.4 jakarta commons-beanutils 1.7.0 jakarta commons-collections 3.2 jakarta commons-logging 1.1.1 ezmorph 1.0.6

    学生选课系统中所用的60个jar包

    collections-2.1.1.jar commons-dbcp.jar commons-digester.jar commons-fileupload.jar commons-httpclient.jar commons-lang.jar commons-logging.jar commons-pool.jar commons-validator.jar cos.jar db-ojb-...

    json-lib-2.4-jdk15

    json-lib-2.4-jdk15.jar jakarta commons-lang 2.5 jakarta commons-beanutils 1.8.0 jakarta commons-collections 3.2.1 jakarta commons-logging 1.1.1 ezmorph 1.0.6

Global site tag (gtag.js) - Google Analytics