一、ImmutableMap.of是什麼?
ImmutableMap.of是Google guava中的一個靜態工廠方法,它的作用是創建一個不可變的map。它可以接受0~5對鍵值對參數,並返回一個不可變的map。當然,如果需要添加更多的鍵值對,我們可以使用另一個靜態工廠方法ImmutableMap.builder()
ImmutableMap immutableMap = ImmutableMap.of("key1", "value1", "key2", "value2", "key3", "value3"); System.out.println(immutableMap);
二、ImmutableMap.of的優勢
在操作集合的時候,我們通常會遇到線程安全、可變性等問題。使用ImmutableMap.of可以幫助我們解決這些問題,它的優勢主要表現在以下幾點:
1、線程安全
由於ImmutableMap.of創建的是一個不可變map,所以多線程操作時不需要考慮線程安全問題。這樣可以大大減輕我們開發時的負擔,讓我們更專註於業務邏輯實現。
ImmutableMap immutableMap = ImmutableMap.of("key1", "value1", "key2", "value2", "key3", "value3"); new Thread(() -> { immutableMap.forEach((key, value) -> { System.out.println(key + ":" + value); }); }).start(); new Thread(() -> { immutableMap.forEach((key, value) -> { System.out.println(key + ":" + value); }); }).start();
2、不可變性
ImmutableMap.of創建出來的map是不可變的。這意味着我們不能添加、修改、刪除其中的鍵值對。但是,如果我們真的需要修改map中的鍵值對,我們可以通過builder()方法創建可變的map,並通過put()方法來添加、修改鍵值對。這樣既保證了map的不可變性,又可以滿足我們的需求。
ImmutableMap.Builder builder = ImmutableMap.builder(); builder.put("key1", "value1"); builder.put("key2", "value2"); ImmutableMap immutableMap = builder.build(); System.out.println(immutableMap);
3、性能優越
如果我們需要創建一個map,通常的做法是使用HashMap等可變類型的map,然後再使其不可變。這個過程需要進行拷貝、重構等操作,會佔用一定的時間和內存空間。但是,ImmutableMap.of在創建map時就已經是不可變的,不需要進行額外的拷貝操作,因此具有較高的性能。
三、ImmutableMap.of的使用場景
ImmutableMap.of可以在很多場景中使用,尤其在需要使用不可變map的場合下,它的優勢依然非常明顯。以下是幾個經典的使用場景:
1、作為方法的返回值
當我們需要返回一個map類型的數據時,如果使用可變的map,需要先將其轉化為不可變的map,否則可能會引發線程安全問題等。使用ImmutableMap.of創建的map是不可變的,可以直接返回,避免了這樣的問題。
public static ImmutableMap getImmutableMap() { return ImmutableMap.of("key1", "value1", "key2", "value2", "key3", "value3"); }
2、防止參數被修改
在某些情況下,當我們需要將一個map傳入一個方法中時,如果使用可變的map,方法中可能會對其進行修改,這是我們不希望看到的。使用ImmutableMap.of可以創建一個不可變的map,它不會被修改,保證了被傳入的參數的不可變性。
public static void printImmutableMap(ImmutableMap immutableMap) { immutableMap.forEach((key, value) -> System.out.println(key + ":" + value)); } public static void main(String[] args) { ImmutableMap immutableMap = ImmutableMap.of("key1", "value1", "key2", "value2", "key3", "value3"); printImmutableMap(immutableMap); }
3、緩存數據
在一些場合下,我們需要緩存一些數據,比如經常訪問的一些配置信息。使用ImmutableMap.of創建的map是不可變的,可以避免線程安全等問題,非常適合緩存數據。
private static final ImmutableMap configMap = ImmutableMap.of("key1", "value1", "key2", "value2", "key3", "value3"); public static void main(String[] args) { String value = configMap.get("key1"); System.out.println(value); }
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/159415.html