为什么使用ImmutableMap?
- 对不可靠的客户代码库来说,它使用安全,可以在未受信任的类库中安全的使用这些对象
- 线程安全的:immutable对象在多线程下安全,没有竞态条件
- 不需要支持可变性, 可以尽量节省空间和时间的开销. 所有的不可变集合实现都比可变集合更加有效的利用内存 (analysis)
- 可以被使用为一个常量,并且期望在未来也是保持不变的,immutable对象可以很自然地用作常量,因为它们天生就是不可变的对于immutable对象的运用来说,它是一个很好的防御编程(defensive programming)的技术实践。
使用方法
初始化:
Map<String,Object> immutableMap = new ImmutableMap.Builder<String,Object>().build();
使用:
- 使用
List.of
工厂方法创建 immutable list,list 中的元素是有序的,允许重复,但不允许为 null。 - 使用
Set.of
工厂方法创建 immutable set,set 中的元素是无序的,且不重复,不允许为 null。 - 使用
Map.of
和Map.ofEntries
方法创建 immutable map,map 中的 key 不允许重复,key 与 value 都不能为 null。
拷贝集合:
- JDK10 之后,可以使用
copyOf
方法来创建集合的拷贝。 - 如果原 list 为 mutable,copyOf 方法会创建一个 immutable 集合,然后拷贝原 list 中的元素,之后,对原 list 的编辑和更新,不会影响 immutable list。如果原 list 为 immutable,copyOf 方法直接返回该 list 的引用。