接下来看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 Commons Collections 3.2.2:Java开发的强大工具》 Apache Commons Collections,简称Collections,是Apache软件基金会提供的一款开源Java库,它为Java集合框架提供了大量的实用工具类和扩展功能。在Java...
Apache Commons Collections是一个Java库,它提供了对集合框架的扩展,增加了许多实用功能,极大地丰富了Java编程中的数据处理能力。这个"commons-collections-3.2.1-bin"压缩包包含的是Apache Commons Collections ...
1. **数据结构增强**:除了Java标准库中的List、Set、Map等,Collections库还提供了如Bag(多值集合)、BidiMap(双向映射)、MultiMap(多值映射)等特殊用途的数据结构,以满足更复杂的需求。 2. **转换和工厂...
《Apache Commons Collections 3.2.1:Java集合框架的强大扩展》 Apache Commons Collections是Apache软件基金会的一个项目,它提供了一系列强大的、用于处理Java集合框架的工具类和算法。在这个项目中,`commons-...
Commons Collections和Apache BeanUtils是Java开发中常用的两个库,它们为开发者提供了丰富的工具类和功能,使得处理集合对象和Bean属性变得更加便捷。这两个库在Java Web开发中扮演着重要角色,尤其是在构建MVC框架...
在Java开发中,Apache Commons库是一组非常重要的工具类库,它们提供了许多实用的功能,以增强Java的标准库。这里提到的三个JAR文件——`commons-beanutils.jar`、`commons-collections-3.1.jar`和`commons-pool-1.2...
《Apache Commons Collections详解》 Apache Commons Collections是Java开发中常用的一个开源库,它为Java集合框架提供了大量的实用工具类和扩展。"commons-collections-3.2.jar"是该库的版本3.2的实现,它包含了一...
Commons Collections是Apache软件基金会开发的一个Java库,主要提供对集合框架的增强和扩展。这个库是Java标准集合接口的补充,增加了许多实用的功能,提高了代码的可读性和效率。"commons-collections4-4.1.jar"是...
Commons Collections为Java集合接口(如List, Set, Map)添加了新的操作方法。例如,`TransformedMap`允许你对映射中的键或值进行转换,`Unmodifiable`接口提供了不可修改的集合视图,增强了集合的安全性。 2. **...
Apache Commons Collections是一个强大的Java集合框架扩展库,它提供了对Java内置集合类的增强功能和新的数据结构。在本文中,我们将深入探讨`commons-collections-3.2.1`版本的相关知识点。 首先,`commons-...
Apache Commons Collections主要针对Java的`java.util.Collections`和`java.util.Map`接口进行了扩展。它提供了一系列的实用类和接口,如`ListUtils`、`MapUtils`、`SetUtils`等,这些工具类包含了许多静态方法,...
该文件里包含两个.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-pool-1.3.jar"和"commons-collections-3.2.1.jar"是两个Java库,它们在开发基于SSH(Struts、Spring、Hibernate)架构的应用时常常被用到。SSH是一种流行的企业级Java应用框架,用于构建高性能、可...
Apache Commons Collections 包含多个模块,如 Bag、BidiMap、Buffer、Comparator、Functor、Iterator、Map、Multimap、Set、TransformedMap、TypeConverter 等。这些模块提供了丰富的接口和实现,使得开发者能够...
标题和描述中提到的"commons-beanutils-1.8.3.jar", "commons-codec-1.7.jar", "commons-collections-3.2.1.jar"是Apache Commons项目中的三个不同组件的JAR文件,这些文件在Java开发中被广泛使用。Apache Commons是...
Apache Commons Collections是一个强大的Java集合框架扩展库,它提供了大量的接口和类来增强Java的内置集合。这个"commons-collections4-4.1-bin.zip"压缩包包含了Apache Commons Collections的源码和jar包,版本为...
Apache Commons Collections是Apache软件基金会的一个项目,它提供了大量的类和接口来扩展Java的集合框架,包括List、Map、Set等接口的实现,以及各种实用工具类和算法。这个库的设计目标是提高代码的可读性和性能,...
《Aduna Commons Collections 2.2.jar:Java编程中的实用工具库》 Aduna Commons Collections 2.2.jar 是一个广泛使用的Java库,它扩展了Java内置的集合框架,提供了更多的数据结构、算法和实用工具类。这个版本的...
Commons BeanUtils和Apache Commons Collections是Java开发中两个非常重要的库,它们为开发者提供了大量实用工具类,极大地简化了日常编程工作。这两个库都是Apache软件基金会的一部分,属于开源项目,广泛应用于...