- 浏览: 358086 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
Cleverxia:
[size=x-small][size=xx-small][c ...
拼接JSON字符串 -
dongbiying:
我找到原因啦。。。// float dlng = 2 * as ...
根据经纬度查询附近的点 -
dongbiying:
请问楼主。我现在传的值是double lat = 39.905 ...
根据经纬度查询附近的点 -
di1984HIT:
真的不错。啊
web.xml配置错误页面跳转 -
yuxiaolongwin:
可以加 j2ee.jar包也行
javax.servlet.jsp.PageContext cannot be resolved to a type
本文摘自: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通过它向开发人员开放了一个可以方便控制对象创建细节的接口。
接下来看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通过它向开发人员开放了一个可以方便控制对象创建细节的接口。
发表评论
-
获取微信用户基本信息
2015-04-25 01:27 8201.微信使用https协议,so,编写https工具类: ... -
java-memcached使用实例
2014-05-30 11:06 737package com.memcache; impo ... -
线程死锁的例子
2014-05-28 16:27 1254package test; public class D ... -
ThreadLocal使用实例
2014-05-27 17:18 12157ThreadLocal为每一个线程都提供了变量的副本,使得每个 ... -
JVM内存区溢出场景模拟
2014-05-15 09:38 874模拟jvm内存溢出,需手动设置jvm启动参数。方法如下图: 在 ... -
Jquery如何获取iframe里面body的html呢?
2013-10-24 19:01 1983如果是自己网页的话,可以这样,$("iframe&q ... -
使用httpClient和httpParser获取指定网址的title
2013-10-23 17:57 3218package com.xinhuanet.cloudDe ... -
ant下载及配置
2013-09-11 15:25 583------------------ant下载及配置----- ... -
MyEclipse web项目如何导入到Eclipse
2013-09-07 14:53 777原文:http://home.51.com/chenyun13 ... -
使用反射封装RowMapper
2013-08-13 15:16 1864package com.xinhuanet.cloudDe ... -
分页工具类
2013-08-06 17:29 708package com.xinhuanet.cloudDe ... -
tomcat的OutOfMemoryError(PermGen space)解决方法(转)
2013-07-27 21:46 667关键字: tomcat outofmemoryer ... -
mysql设置远程连接
2013-07-27 13:58 642重新启动mysql服务: service mysql res ... -
使用apt-spy自动配置Debian软件源
2013-07-27 10:52 4502使用apt-spy自动配置Debian ... -
unable to locate package
2013-07-27 10:49 1530碰到这个问题后找到这个帖子就转了过来 当用apt-get更新软 ... -
mysql版本
2013-07-26 21:08 706MySQL Community Server--------m ... -
linux配置java环境变量(详细)
2013-07-25 21:53 683linux配置java环境变量(详细) 一. 解压安装jdk ... -
为什么要让网页静态化
2013-07-21 20:32 794为什么要让网页静态化,生成静态的程序来做网站的好处? ... -
js实现div自动滚动
2013-05-18 20:28 28432<!DOCTYPE html PUBLIC &quo ... -
启动Tomcat时遇到的 java.lang.IllegalArgumentException: Can't convert argument: null 异常
2013-05-13 20:25 687本文摘自:http://tchen8.iteye.com/bl ...
相关推荐
该文件里包含两个.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;
java读取excel2007解决org.apache.commons.collections找不到的问题。
包中对Java中的集合类进行了一定的补充,定义了一些全新的集合,当然也是实现了Collection接口的,比如Bag,BidiMap。同时拥有新版本的原有集合,比如FastArrayList。最后,更为重要的是一系列utils类,提供了我们...
BidiMap interface for maps that can be looked up from value to key as well and key to value MapIterator interface to provide simple and quick iteration over maps Transforming decorators that alter ...
用于地图的BidiMap界面,可以从值查找到键,也可以键入值 MapIterator接口提供简单快速的迭代迭代 转换装饰器,在添加到集合中时更改每个对象 使多个集合看起来像一个的复合集合 添加了保留订单元素的有序映射和集合...