一、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/n/159415.html