`

BidiMap.MultiMa.LazyMap

 
阅读更多
本文摘自:http://501565246-qq-com.iteye.com/blog/790465

接下来看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通过它向开发人员开放了一个可以方便控制对象创建细节的接口。
分享到:
评论

相关推荐

    collections-generic-4.01_and_looks-2.1.4

    该文件里包含两个.jar包: collections-generic-4.01.jar和looks-2.1.4.jar, 引入collections-generic-4.01.jar: 右击工程--》Build path ——》Add... import org.apache.commons.collections15.bidimap.TreeBidiMap;

    commons-collection

    String keyFromValue = bidiMap.getKey("value2"); // key2 ``` - **集合转换**:使用Transformer进行对象转换。例如: ```java Transformer, Integer> transformer = new Transformer, Integer>() { public ...

    commons-collections4-4.1.jar

    《Apache Commons Collections 4.1在Java中处理Excel2007文件的解决方案》 Apache Commons Collections库是Java开发中的一个强大工具,它提供了一系列高效、实用的数据结构和算法。在处理Excel2007(.xlsx)文件时...

    JAVA实现社会统一信用代码校验的方法

    import org.apache.commons.collections4.bidimap.TreeBidiMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.validation.ValidationException; import java.util.Map; import java.util...

    commons所有jar包

    如 `ArrayListValuedHashMap` 和 `BidiMap`. 4. **Commons BeanUtils**:简化 JavaBean 操作,如属性的读写、复制、类型转换等。它基于反射,可以减少代码量。 5. **Commons Codec**:包含了各种编码和解码的实现...

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

    - **LazyMap**:提供了懒加载的支持。 - **CaseInsensitiveMap**:提供了不区分大小写的键值对。 - **IdentityMap**:提供了基于对象身份的映射。 - **LRUMap**:提供了最近最少使用(LRU)缓存。 - **MultiKeyMap**...

    commons-collections-3.2.2-bin.tar包

    1. **数据结构增强**:除了Java标准库中的List、Set、Map等,Collections库还提供了如Bag(多值集合)、BidiMap(双向映射)、MultiMap(多值映射)等特殊用途的数据结构,以满足更复杂的需求。 2. **转换和工厂...

    commons-collections4-4.4-bin.zip

    1. **集合实现**:除了Java内置的集合类型,Collections4提供了一些特殊用途的集合实现,如Bag(允许重复元素的集合)和BidiMap(双向映射,支持key到value和value到key的映射)。 2. **迭代器增强**:该库提供了...

    commons-collections-3.2.2.jar

    包中对Java中的集合类进行了一定的补充,定义了一些全新的集合,当然也是实现了Collection接口的,比如Bag,BidiMap。同时拥有新版本的原有集合,比如FastArrayList。最后,更为重要的是一系列utils类,提供了我们...

    commons-collections-3.2.jar

    1. **容器**:提供了一些基本的数据结构,如双向映射(BidiMap)、多值映射(MultiMap)和堆(Heap)。这些容器可以处理复杂的关联关系,比如双向映射允许通过键或值来查找对应的键值对。 2. **迭代器**:扩展了...

    commons-beanutils-1.8.3.jar commons-codec-1.7.jar commons-collections-3.2.1.jar

    - 版本3.2.1提供了丰富的容器类,如Bag(多值集合)、Map接口的实现(如BidiMap、MultiValueMap等)以及迭代器的增强版本。 - 它还包括了各种集合操作,如列表和映射的过滤、转换、合并、排序等功能,以及一些实用...

    java开发常用的jar包的作用解释.docx

    commons-collections.jar 的作用是提供了一些实用的集合类和方法,包括 Bag、Buffer、BidiMap、Map 迭代器等等。 commons-collections.jar 中包括了许多实用的类和方法,例如 Bag、Buffer、BidiMap、Map 迭代器...

    commons-Collections最常用类介绍.pdf

    ***mons.collections.bidimap:提供实现了双向映射(Bidirectional Map)的类,这种结构允许通过键和值双向访问数据。 ***mons.collections.buffer:提供了实现Buffer接口的类,Buffer通常用于临时存储数据,常用于...

    Apache Commons Collections

    5. **双向映射**:`BidiMap`接口支持双向映射,即键和值之间可以相互查找。这对于需要双向关联数据的情况非常有用。 6. **堆栈和队列**:除了Java标准库中的`Stack`和`Queue`,Commons Collections提供了`...

    java开发常用的jar包的作用解释.pdf

    它提供了 Bag 接口、Buffer 接口、BidiMap 接口、Map 迭代器等等。 commons-collections.jar 中的一些重要类别包括: * Bag 接口:适用于包含一个对象的多个拷贝的集合。 * Buffer 接口:适用于具有顺序的集合类,...

    commons-collections4-4.4-bin.tar.gz

    1. **容器**: 提供了一些高级容器实现,如BidiMap(双向映射)、MultiMap(多值映射)、Buffer(缓冲队列)等,这些容器在处理复杂数据结构时非常有用。 2. **迭代器**: 扩展了Java的迭代器接口,提供了一些增强...

    commons-collections4-4.1-bin.zip

    1. **容器类**:除了Java标准库中的List、Set、Map等,Collections4提供了更加灵活的容器,如MultiMap(允许多个键对应一个值),BidiMap(双向映射)以及Stack和Queue的实现。 2. **转换器**:转换器接口...

    org.apache.commosjar包

    例如,`BidiMap`支持双向映射,`MultiMap`允许一个键对应多个值,以及`Comparator`和`Transformer`接口,用于自定义比较和转换逻辑。 2. **I/O操作**:Apache Commons IO 提供了与Java标准I/O API互补的功能,如...

Global site tag (gtag.js) - Google Analytics