- 浏览: 362091 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 8471.微信使用https协议,so,编写https工具类: ... -
java-memcached使用实例
2014-05-30 11:06 758package com.memcache; impo ... -
线程死锁的例子
2014-05-28 16:27 1284package test; public class D ... -
ThreadLocal使用实例
2014-05-27 17:18 12202ThreadLocal为每一个线程都提供了变量的副本,使得每个 ... -
JVM内存区溢出场景模拟
2014-05-15 09:38 902模拟jvm内存溢出,需手动设置jvm启动参数。方法如下图: 在 ... -
Jquery如何获取iframe里面body的html呢?
2013-10-24 19:01 2014如果是自己网页的话,可以这样,$("iframe&q ... -
使用httpClient和httpParser获取指定网址的title
2013-10-23 17:57 3245package com.xinhuanet.cloudDe ... -
ant下载及配置
2013-09-11 15:25 607------------------ant下载及配置----- ... -
MyEclipse web项目如何导入到Eclipse
2013-09-07 14:53 804原文:http://home.51.com/chenyun13 ... -
使用反射封装RowMapper
2013-08-13 15:16 1883package com.xinhuanet.cloudDe ... -
分页工具类
2013-08-06 17:29 744package com.xinhuanet.cloudDe ... -
tomcat的OutOfMemoryError(PermGen space)解决方法(转)
2013-07-27 21:46 693关键字: tomcat outofmemoryer ... -
mysql设置远程连接
2013-07-27 13:58 672重新启动mysql服务: service mysql res ... -
使用apt-spy自动配置Debian软件源
2013-07-27 10:52 4534使用apt-spy自动配置Debian ... -
unable to locate package
2013-07-27 10:49 1573碰到这个问题后找到这个帖子就转了过来 当用apt-get更新软 ... -
mysql版本
2013-07-26 21:08 737MySQL Community Server--------m ... -
linux配置java环境变量(详细)
2013-07-25 21:53 706linux配置java环境变量(详细) 一. 解压安装jdk ... -
为什么要让网页静态化
2013-07-21 20:32 823为什么要让网页静态化,生成静态的程序来做网站的好处? ... -
js实现div自动滚动
2013-05-18 20:28 28473<!DOCTYPE html PUBLIC &quo ... -
启动Tomcat时遇到的 java.lang.IllegalArgumentException: Can't convert argument: null 异常
2013-05-13 20:25 704本文摘自: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;
String keyFromValue = bidiMap.getKey("value2"); // key2 ``` - **集合转换**:使用Transformer进行对象转换。例如: ```java Transformer, Integer> transformer = new Transformer, Integer>() { public ...
《Apache Commons Collections 4.1在Java中处理Excel2007文件的解决方案》 Apache Commons Collections库是Java开发中的一个强大工具,它提供了一系列高效、实用的数据结构和算法。在处理Excel2007(.xlsx)文件时...
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...
如 `ArrayListValuedHashMap` 和 `BidiMap`. 4. **Commons BeanUtils**:简化 JavaBean 操作,如属性的读写、复制、类型转换等。它基于反射,可以减少代码量。 5. **Commons Codec**:包含了各种编码和解码的实现...
- **LazyMap**:提供了懒加载的支持。 - **CaseInsensitiveMap**:提供了不区分大小写的键值对。 - **IdentityMap**:提供了基于对象身份的映射。 - **LRUMap**:提供了最近最少使用(LRU)缓存。 - **MultiKeyMap**...
1. **数据结构增强**:除了Java标准库中的List、Set、Map等,Collections库还提供了如Bag(多值集合)、BidiMap(双向映射)、MultiMap(多值映射)等特殊用途的数据结构,以满足更复杂的需求。 2. **转换和工厂...
1. **集合实现**:除了Java内置的集合类型,Collections4提供了一些特殊用途的集合实现,如Bag(允许重复元素的集合)和BidiMap(双向映射,支持key到value和value到key的映射)。 2. **迭代器增强**:该库提供了...
包中对Java中的集合类进行了一定的补充,定义了一些全新的集合,当然也是实现了Collection接口的,比如Bag,BidiMap。同时拥有新版本的原有集合,比如FastArrayList。最后,更为重要的是一系列utils类,提供了我们...
1. **容器**:提供了一些基本的数据结构,如双向映射(BidiMap)、多值映射(MultiMap)和堆(Heap)。这些容器可以处理复杂的关联关系,比如双向映射允许通过键或值来查找对应的键值对。 2. **迭代器**:扩展了...
- 版本3.2.1提供了丰富的容器类,如Bag(多值集合)、Map接口的实现(如BidiMap、MultiValueMap等)以及迭代器的增强版本。 - 它还包括了各种集合操作,如列表和映射的过滤、转换、合并、排序等功能,以及一些实用...
commons-collections.jar 的作用是提供了一些实用的集合类和方法,包括 Bag、Buffer、BidiMap、Map 迭代器等等。 commons-collections.jar 中包括了许多实用的类和方法,例如 Bag、Buffer、BidiMap、Map 迭代器...
***mons.collections.bidimap:提供实现了双向映射(Bidirectional Map)的类,这种结构允许通过键和值双向访问数据。 ***mons.collections.buffer:提供了实现Buffer接口的类,Buffer通常用于临时存储数据,常用于...
5. **双向映射**:`BidiMap`接口支持双向映射,即键和值之间可以相互查找。这对于需要双向关联数据的情况非常有用。 6. **堆栈和队列**:除了Java标准库中的`Stack`和`Queue`,Commons Collections提供了`...
它提供了 Bag 接口、Buffer 接口、BidiMap 接口、Map 迭代器等等。 commons-collections.jar 中的一些重要类别包括: * Bag 接口:适用于包含一个对象的多个拷贝的集合。 * Buffer 接口:适用于具有顺序的集合类,...
1. **容器**: 提供了一些高级容器实现,如BidiMap(双向映射)、MultiMap(多值映射)、Buffer(缓冲队列)等,这些容器在处理复杂数据结构时非常有用。 2. **迭代器**: 扩展了Java的迭代器接口,提供了一些增强...
1. **容器类**:除了Java标准库中的List、Set、Map等,Collections4提供了更加灵活的容器,如MultiMap(允许多个键对应一个值),BidiMap(双向映射)以及Stack和Queue的实现。 2. **转换器**:转换器接口...
例如,`BidiMap`支持双向映射,`MultiMap`允许一个键对应多个值,以及`Comparator`和`Transformer`接口,用于自定义比较和转换逻辑。 2. **I/O操作**:Apache Commons IO 提供了与Java标准I/O API互补的功能,如...