commons-collections使用介绍之Map
2016-04-07 11:28
543 查看
介绍完了
使用示例:
运行结果:
使用示例:
运行结果:
使用示例:
运行结果:
使用示例:
运行结果:
使用示例:
运行结果:
使用示例:
运行结果:
使用示例:
运行结果:
使用示例:
运行结果:
使用示例:
运行结果:
List,我怕们继续来看commons-collections中为我们提供的
Map相关的实现类。
CaseInsensitiveMap
CaseInsensitiveMap是一个对键的大小写不敏感的Map,在将键添加或与其它键比较之前,会将其转换为小写字符串。
使用示例:
package com.gujin.collections; import org.apache.commons.collections.map.CaseInsensitiveMap; import org.junit.Test; public class CaseInsensitiveMapTest { @Test public void test() { CaseInsensitiveMap caseInsensitiveMap = new CaseInsensitiveMap(); caseInsensitiveMap.put("name", "jianggujin"); caseInsensitiveMap.put("NAME", "jianggujin"); System.out.println(caseInsensitiveMap); System.out.println(caseInsensitiveMap.get("nAme")); } }
运行结果:
{name=jianggujin} jianggujin
CompositeMap
CompositeMap修饰另一个Map。添加和移除操作使用可插拔的策略,如果没有提供策略,添加和删除是不支持的。
使用示例:
package com.gujin.collections; import java.util.Collection; import java.util.HashMap; import java.util.Map; import org.apache.commons.collections.map.CompositeMap; import org.apache.commons.collections.map.CompositeMap.MapMutator; import org.junit.Test; public class CompositeMapTest { @Test public void test() { CompositeMap compositeMap = new CompositeMap(); compositeMap.addComposited(new HashMap<String, String>()); MapMutator mapMutator1 = new MapMutator() { @Override public void resolveCollision(CompositeMap composite, Map existing, Map added, Collection intersect) { } @Override public void putAll(CompositeMap map, Map[] composited, Map mapToAdd) { } @Override public Object put(CompositeMap map, Map[] composited, Object key, Object value) { return composited[0].put(key, value); } }; MapMutator mapMutator2 = new MapMutator() { @Override public void resolveCollision(CompositeMap composite, Map existing, Map added, Collection intersect) { } @Override public void putAll(CompositeMap map, Map[] composited, Map mapToAdd) { } @Override public Object put(CompositeMap map, Map[] composited, Object key, Object value) { return composited[0].put(key.toString().toUpperCase(), value); } }; compositeMap.setMutator(mapMutator1); compositeMap.put("name", "jianggujin"); compositeMap.setMutator(mapMutator2); compositeMap.put("name", "JIANGGUJIN"); System.out.println(compositeMap.get("name")); System.out.println(compositeMap.get("NAME")); } }
运行结果:
jianggujin JIANGGUJIN
DefaultedMap
DefaultedMap修饰另一个Map,当使用
get方法时,如果键不存在,将返回默认对象。
使用示例:
package com.gujin.collections; import org.apache.commons.collections.map.DefaultedMap; import org.junit.Test; public class DefaultedMapTest { @Test public void test() { DefaultedMap defaultedMap = new DefaultedMap("NULL"); defaultedMap.put("name", "jianggujin"); System.out.println(defaultedMap); // 返回默认值 System.out.println(defaultedMap.get("NAME")); } }
运行结果:
{name=jianggujin} NULL
FixedSizeMap
FixedSizeMap修饰另一个Map防止添加/删除并且固定Map大小。仅允许对已有的键进行值的修改,影响到Map大小的操作都是不被支持的。
使用示例:
package com.gujin.collections; import java.util.HashMap; import org.apache.commons.collections.map.FixedSizeMap; import org.junit.Test; public class FixedSizeMapTest { @Test public void test() { HashMap<String, String> src = new HashMap<String, String>(); src.put("name", "jianggujin"); FixedSizeMap fixedSizeMap = (FixedSizeMap) FixedSizeMap.decorate(src); fixedSizeMap.put("name", "121"); // 不支持 //fixedSizeMap.put("name1", "121"); System.out.println(fixedSizeMap); } }
运行结果:
{name=121}
IdentityMap
IdentityMap提供了一个Map的实现,与其他Map不同的是,在
IdentityMap中匹配键和值是通过
==而不是
equals()。
使用示例:
package com.gujin.collections; import org.apache.commons.collections.map.IdentityMap; import org.junit.Test; public class IdentityMapTest { @Test public void test() { IdentityMap identityMap = new IdentityMap(); String key1 = "name"; String key2 = new String("name");// key1 != key2 identityMap.put(key1, "jianggujin"); System.out.println(identityMap); System.out.println(identityMap.get(key1)); System.out.println(identityMap.get(key2)); } }
运行结果:
{name=jianggujin} jianggujin
null
LazyMap
LazyMap修饰另一个Map。当执行
get()方法时,如果键值不存在,则返回工厂创建的对象。
使用示例:
package com.gujin.collections; import java.util.HashMap; import org.apache.commons.collections.Factory; import org.apache.commons.collections.map.LazyMap; import org.junit.Test; public class LazyMapTest { @Test public void test() { Factory factory = new Factory() { @Override public Object create() { return "NULL"; } }; LazyMap lazyMap = (LazyMap) LazyMap.decorate( new HashMap<String, String>(), factory); lazyMap.put("name", "jianggujin"); System.out.println(lazyMap); System.out.println(lazyMap.get("hello")); } }
运行结果:
{name=jianggujin} NULL
LinkedMap
LinkedMap实现了一个可维护顺序的Map,键的顺序为插入的顺序。
使用示例:
package com.gujin.collections; import org.apache.commons.collections.map.LinkedMap; import org.junit.Test; public class LinkedMapTest { @Test public void test() { LinkedMap linkedMap = new LinkedMap(); for (int i = 0; i < 10; i++) { linkedMap.put("key" + i, "value" + i); } System.out.println(linkedMap); String key = "key5"; System.out.println(linkedMap.previousKey(key)); System.out.println(linkedMap.nextKey(key)); System.out.println(linkedMap.indexOf(key)); } }
运行结果:
{key0=value0, key1=value1, key2=value2, key3=value3, key4=value4, key5=value5, key6=value6, key7=value7, key8= value8, key9=value9} key4 key6 5
MultiKeyMap
MultiKeyMap实现了一个允许多个键的Map,允许将多个键关联到一个值上。
使用示例:
package com.gujin.collections; import org.apache.commons.collections.map.MultiKeyMap; import org.junit.Test; public class MultiKeyMapTest { @Test public void test() { MultiKeyMap multiKeyMap = new MultiKeyMap(); // 多个键对应一个值 multiKeyMap.put("name", "NAME", "jianggujin"); System.out.println(multiKeyMap); System.out.println(multiKeyMap.get("name")); System.out.println(multiKeyMap.get("NAME")); System.out.println(multiKeyMap.get("name", "NAME")); } }
运行结果:
{MultiKey[name, NAME]=jianggujin} null null jianggujin
MultiValueMap
MultiValueMap允许一个键关联多个值。
使用示例:
package com.gujin.collections; import java.util.ArrayList; import org.apache.commons.collections.map.MultiValueMap; import org.junit.Test; public class MultiValueMapTest { @Test public void test() { MultiValueMap multiValueMap = new MultiValueMap(); ArrayList<String> list = new ArrayList<String>(); list.add("value1"); list.add("value2"); list.add("value3"); list.add("value4"); multiValueMap.putAll("key", list); System.out.println(multiValueMap); System.out.println(multiValueMap.get("key")); } }
运行结果:
{key=[value1, value2, value3, value4]} [value1, value2, value3, value4]
PredicatedMap
PredicatedMap修饰另一个Map。在添加数据的时候进行校验。可参考上一篇博客中的PredicatedList用法。
ReferenceMap
ReferenceMap使用软引用的方式维护数据,允许数据被垃圾收集器清理。
ReferenceIdentityMap
ReferenceIdentityMap结合了
IdentityMap和
ReferenceMap,使用软引用维护数据并且使用
==匹配数据。
TransformedMap
TransformedMap修饰另一个Map,在添加数据时,先对键和值进行转换。
TypedMap
TypedMap修饰另一个Map,限定了键和值的数据类型。
UnmodifiableMap
UnmodifiableMap修饰另一个Map,使其不允许被修改。
相关文章推荐
- android Google Map获取地理位置信息的方法
- Spark RDD API详解(一) Map和Reduce
- Python中map()函数浅析
- Android使用Google Map浅谈
- Erlang中的映射组Map详细介绍
- Rails Routes中new、collection、member的区别浅析
- c++中map的基本用法和嵌套用法实例分析
- 百度地图给map添加右键菜单(判断是否为marker)
- JavaScript中实现Map的示例代码
- jquery中map函数与each函数的区别实例介绍
- jquery中map函数遍历数组用法实例
- jquery与google map api结合使用 控件,监听器
- 解决 The Controls collection cannot be modified because the control contains code blocks
- jquery遍历数组与筛选数组的方法
- JavaScript中实现map功能代码分享
- 用json方式实现在 js 中建立一个map
- Android Map新用法:MapFragment应用介绍
- js Map List 遍历使用示例
- java实现遍历Map的方法
- velocity显示List与Map的方法详细解析