java ImmutableMap的使用说明

网友投稿 319 2022-10-20


java ImmutableMap的使用说明

ImmutableMap:一个不可变集合

java中的Immutable对象:

简单地说,如果一个对象实例不能被更改就是一个Immutable的对象,Java SDK提供的大量值对象,比如String等都是Immutable的对象。

创建ImmutableMap:

Map immutableMap = new ImmutableMap.Builder().build();

在创建时放值:

Map immutableMap = new ImmutableMap.Builder()

.put("k1","v1")

.put("k2","v2")

.build();

创建后不可变:

immutableMap.put("k1","v3");//会抛出java.lang.UnsupportedOperationException

ImmutableMap中key和value均不能为null,放入null值会抛出NPE

ImmutableMap的使用场景:

适合

1、确定性的配置, 比如http://根据不同的key值得到不同的请求url

2、写单元测试

不适合

1、key, value为未知参数, 可能有null产生的情况

guava中ImmutableMap使用示例及好处

ImmutableMap是不可变的,线程安全的;它可以创建一些常量的映射键值对;他提供了很多的组合键值对的方法,源码中使用了一个静态内部类来组装构建ImmutableMap,静态内部类作为外部类的辅助构建ImmutableMap,内部使用final声明了一个ArrayList变量。

public static class Builder{

final ArrayList> entries = Lists.newArrayList();

public Builder() {}

public Builder put(K key, V value)

{

http:// this.entries.add(ImmutableMap.entryOf(key, value));

return this;

}

public Builder put(Map.Entry extends K, ? extends V> entry)

{

K key = entry.getKey();

V value = entry.getValue();

if ((entry instanceof ImmutableEntry)) {

Preconditions.checkNotNull(key);

Preconditions.checkNotNull(value);

Map.Entry immutableEntry = entry;

this.entries.add(immutableEntry);

}

else

{

this.entries.add(ImmutableMap.enhttp://tryOf(key, value));

}

return this;

}

public Builder putAll(Map extends K, ? extends V> map)

{

this.entries.ensureCapacity(this.entries.size() + map.size());

for (Map.Entry extends K, ? extends V> entry : map.entrySet()) {

put(entry.getKey(), entry.getValue());

}

return this;

}

public ImmutableMap build()

{

return fromEntryList(this.entries);

}

private static ImmutableMap fromEntryList(List> entries)

{

int size = entries.size();

switch (size) {

case 0:

return ImmutableMap.of();

case 1:

return new SingletonImmutableBiMap((Map.Entry)Iterables.getOnlyElement(entries));

}

Map.Entry, ?>[] entryArray = (Map.Entry[])entries.toArray(new Map.Entry[entries.size()]);

return new RegularImmutableMap(entryArray);

}

}

之前我们判断取值结果可以使用if else形式:

int a = 1;

if(a == 1) {

System.out.println(a);

} else {

System.out.println(a);

}

或者使用switch方式:

int a = 1;

switch (a) {

qIVFgqPcjh case 1:

System.out.println(a);

break;

case 2:

System.out.println(a);

default:

System.out.println(a);

break;

}

现在可以使用ImmutableMap集合来组装键值对,这样的组合方式既简单又省去了大量多余的代码:

ImmutableMap map = ImmutableMap .builder()

.put("1", "1")

.put("2", "2")

.put("3", "3")

.build();

ImmutableMap map1 = ImmutableMap .of("1", "2");


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:IB客座主编(三)——美国康普企业解决方案大中国区总监黄海涛
下一篇:IB客座主编(二)——泛达公司大中国区总经理Mr.Michael D.Smith
相关文章

 发表评论

暂时没有评论,来抢沙发吧~