`

[转]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

========================================

 

分享到:
评论

相关推荐

    collections-generic-4.01_and_looks-2.1.4

    该文件里包含两个.jar包: collections-generic-4.01.jar和looks-2.1.4.jar, ... import org.apache.commons.collections15.MapIterator; import org.apache.commons.collections15.bidimap.TreeBidiMap;

    commons-collections4-4.1

    Commons-Collections seek to build upon the JDK classes by providing new interfaces, implementations and utilities. There are many features, including: Bag interface for collections that have a number...

    JSON包下载

    JSON相关JAR包和文档 1、commons-beanutils-1.7.0.jar 2、commons-collections-3.2.jar 3、commons-lang-2.3....org/apache/commons/collections/map/ListOrderedMap这个异常。 把这些JAR包导入到工程就可以直接使用了

    使用json-lib-2.2.2-jdk15.jar所要用到的jar包

    java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean java.lang.NoClassDefFoundError: org/apache/...

    json所有的jar包下载

    java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean java.lang.NoClassDefFoundError: org/apache/...

    使用json所要用到的jar包

    java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean java.lang.NoClassDefFoundError: org/apache/...

    java使用json的必备7个jar包

    java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap commons-lang-2.4.jar不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/...

    json所需JAR包合集

    java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap commons-lang-2.4.jar不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/...

    java--json解析包

    java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap commons-lang-2.4.jar不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/...

    common-collection4.2jar包及API文档

    Commons-Collections通过提供新的接口,实现和实用程序来寻求构建JDK类。有许多功能,包括: 包含每个对象的多个副本的集合的包接口 用于地图的BidiMap界面,可以从值查找到键,也可以键入值 MapIterator接口提供...

    java collections framework.ppt

    Linked List Array List Hash Set & Tree Set Hash Map & Tree Map Special set & map

    map、list等转换json需要jar包

    转换json的时候需要的jar包 commons-beanutils.jar commons-collections-3.1.jar commons-lang-2.3.jar commons-logging-1.1.1.jar ezmorph-1.0.4.jar ezmorph-1.0.4.jar

    json和map互转需要的包

    commons-beanutils-1.7.0.jar,commons-collections-3.2.jar,commons-lang-2.4.jar,commons-logging-1.1.jar,ezmorph-1.0.4.jar,json-lib-2.2.2-jdk15.jar,json-lib-2.3-jdk15.jar

    JSON需要的jar包

    java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap commons-lang-2.4.jar不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/...

    在SpringMVC中使用JSON需要引入的几个jar包

    转化javabeans,map,collections,jsonarray,xml成为json数据 2.转化json格式数据成为javabean对象 2.commons-beanutils-1.7.0.jar 3.commons-collections-3.2.jar 4.commons-lang-2.3.jar 5.commons-logging-...

    Json与java对象转换所需架包

    commons-collections.jar org/apache/commons/collections/map/ListOrderedMap commons-lang-2.4.jar org/apache/commons/lang/exception/NestableRuntimeException commons-logging-1.1.1.jar org/apache/commons/...

    Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.Transformer异常

    主要介绍了Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    java进阶13天资料.zip

    day05-迭代器,数据结构,List,Set ,TreeSet集合,Collections工具类 day06-Map集合,HashMapTreeMap,斗地主、图书管理系统,排序算法 day07-异常,线程的创建方式,,线程安全,线程同步 day08-线程状态,volatile关键字...

    java解析json

    commons-collections-3.2.1 commons-lang-2.6 commons-logging-1.1.3 ezmorph-1.0.6 json-lib-2.4-jdk15 demo: package com; import java.util.ArrayList; import java.util.HashMap; import java.util....

    使用python对OpenStreetMap地图数据进行清洗

    使用pyton对OpenStreetMap地图数据进行清洗 import lxml.etree as ET ... "Trail", "Parkway", "Commons", 'Alley', 'Blvd', 'Bowery', 'Americas', 'Bushwick', 'East', 'South','West', 'North', 'P

Global site tag (gtag.js) - Google Analytics