Guava ImmutableMap

起因:

今天在敲代碼的時候有一個想法,初始化一個Map對象,存儲小程序推送模板消息。本來是考慮使用enum枚舉類,之后因為初始話map對象卡住了。去搜索了一下,發(fā)現(xiàn)ImmutableMap類的神奇之處,記錄并學習一下。

1.什么是ImmutableMap對象

根據(jù)guava文檔所描述的,ImmutableMap是一個不可變的Map對象,其構(gòu)造器如下所示,用于創(chuàng)建不可變Map實例。
|static class |ImmutableMap.Builder<K,V>|

ImmutableMap.png

Guava提供了每個java.util的不可變版本。使用 ImmutableMap 映射 。每當我們嘗試修改它時,它都會拋出 UnsupportedOperationException。

2.可以鏈式編程的Map

最開始對他感興趣是因為他可以鏈式編程,顯得很酷,根據(jù)代碼提示寫起來也很塊,所以,進一步了解他。

    Map<String, String> stringStringMap = ImmutableMap.<String,String>builder()
            .put("page","page/page/index")
            .put("templateId","")
            .put("templateId","")
            .put("formId","")
            .build();

3.不可變的Map

為什么需要不可變的集合呢?

(1)保證線程安全:在并發(fā)程序中,使用Immutable既保證線程安全性,也大大增強了并發(fā)時的效率(跟并發(fā)鎖方式相比)。尤其當一個對象是值對象時,更應(yīng)該考慮采用Immutable方式;
(2)被不可信的類庫使用時會很安全;
(3)如果一個對象不需要支持修改操作(mutation),將會節(jié)省空間和時間的開銷;經(jīng)過分析,所有不可變的集合實現(xiàn)都比可變集合更加有效地利用內(nèi)存;
(4)可以當作一個常量來對待,并且這個對象在以后也不會被改變。
將一個對象復制一份成immutable的,是一個防御性編程技術(shù)。

為什么不可變?

ImmutableMap.png

源碼中,在build()方法里,進行了判斷,因為在builder()的時候size被初始化為4,所以這里直接就返回了一個不可變的集合。

put方法

而put方法,直接拋出異常,不可添加,其他方法相同。


不要以為每天把功能完成了就行了,這種思想是要不得的,互勉~!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容