您的位置:首页 > 其它

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,使其不允许被修改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  commons collection Map