亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

java ImmutableMap的使用說明

瀏覽:74日期:2022-08-11 08:26:55
ImmutableMap:一個不可變集合

java中的Immutable對象:

簡單地說,如果一個對象實例不能被更改就是一個Immutable的對象,Java SDK提供的大量值對象,比如String等都是Immutable的對象。

創建ImmutableMap:

Map<String,Object> immutableMap = new ImmutableMap.Builder<String,Object>().build();

在創建時放值:

Map<String,Object> immutableMap = new ImmutableMap.Builder<String,Object>() .put('k1','v1') .put('k2','v2') .build();

創建后不可變:

immutableMap.put('k1','v3');//會拋出java.lang.UnsupportedOperationExceptionImmutableMap中key和value均不能為null,放入null值會拋出NPE

ImmutableMap的使用場景:

適合

1、確定性的配置, 比如根據不同的key值得到不同的請求url

2、寫單元測試

不適合

1、key, value為未知參數, 可能有null產生的情況

guava中ImmutableMap使用示例及好處

ImmutableMap是不可變的,線程安全的;它可以創建一些常量的映射鍵值對;他提供了很多的組合鍵值對的方法,源碼中使用了一個靜態內部類來組裝構建ImmutableMap,靜態內部類作為外部類的輔助構建ImmutableMap,內部使用final聲明了一個ArrayList變量。

public static class Builder<K, V>{ final ArrayList<Map.Entry<K, V>> entries = Lists.newArrayList(); public Builder() {} public Builder<K, V> put(K key, V value) { this.entries.add(ImmutableMap.entryOf(key, value)); return this; } public Builder<K, V> 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<K, V> immutableEntry = entry;this.entries.add(immutableEntry); } else {this.entries.add(ImmutableMap.entryOf(key, value)); } return this; } public Builder<K, V> 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<K, V> build() { return fromEntryList(this.entries); } private static <K, V> ImmutableMap<K, V> fromEntryList(List<Map.Entry<K, V>> 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) {case 1: System.out.println(a); break;case 2: System.out.println(a);default: System.out.println(a); break;}

現在可以使用ImmutableMap集合來組裝鍵值對,這樣的組合方式既簡單又省去了大量多余的代碼:

ImmutableMap<String, Object> map = ImmutableMap .<String, Object>builder() .put('1', '1') .put('2', '2') .put('3', '3') .build();

ImmutableMap<String, String> map1 = ImmutableMap .<String, String>of('1', '2');

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 成年女人色费视频免费 | 精品国产国产综合精品 | 亚洲精品色婷婷在线影院麻豆 | 欧美在线国产 | 在线播放国产区 | 欧美日韩在线播放一区二区三区 | 国产无卡一级毛片aaa | 国产高清不卡视频在线播放 | 日韩做爰在线观看免费 | 狼人 成人 综合 亚洲 | 日产免费线路一页二页 | 一级一级特黄女人精品毛片 | 国产l精品国产亚洲区久久 国产ppp在线视频在线观看 | 高h辣肉各种姿势爽文bl | xxxx性×xx| 欧美一区二区在线观看视频 | 免费一级黄色毛片 | 国产一区二区三区久久 | 人人九九 | 色综合夜夜嗨亚洲一二区 | 在线亚视频 | 久久精品国产99国产精2020丨 | 国产91香蕉 | 九九小视频| 特黄免费| 毛片日韩 | 人体大胆做受免费视频 | 九九99国产精品视频 | 毛片黄在线看免费 | a免费视频 | 亚洲中字 | 亚洲视频网址 | 欧美一级片a | 久爱青草视频在线观看 | 男人都懂www深夜免费网站 | 3344成年站福利在线视频免费 | 黄色录像日本 | 污污美女网站 | 欧美在线成人午夜网站 | 国产伦精品一区二区三区无广告 | 又黄又爽又成人免费视频 |