不可变集合是不可被修改的。集合的数据项是在创建的时候提供,并且在整个生命周期中都不可改变。
Immutable集合有以下的优点:
1.对不可靠的客户代码库来说,它使用安全,可以在未受信任的类库中安全的使用这些对象
2.线程安全的:immutable对象在多线程下安全,没有竞态条件
3.不需要支持可变性, 可以尽量节省空间和时间的开销. 所有的不可变集合实现都比可变集合更加有效的利用内存
4.可以被使用为一个常量,并且期望在未来也是保持不变的
//不可变集合 ImmutableList<String> list = ImmutableList.of("B", "A", "C", "D", "A"); ImmutableMap<String, String> map = ImmutableMap.of("key2", "value2", "key1", "value1"); ImmutableMultimap<String, String> multimap = ImmutableMultimap.of("key1", "value11", "key2", "value2", "key1", "value1"); //键值允许有多个 ImmutableSortedMap<String, String> sortedMap = ImmutableSortedMap.of("key2", "value2", "key1", "value1"); //键排序 ImmutableSet<String> set = ImmutableSet.of("B", "A", "C", "D", "A"); //值不重复。自动去掉重复值 ImmutableMultiset<String> multiset = ImmutableMultiset.of("B", "A", "C", "D", "A"); //值允许重复 ImmutableSortedSet<String> sortedSet = ImmutableSortedSet.of("B", "A", "C", "D", "A"); //值排序且不重复。自动去掉重复值 ImmutableSortedMultiset<String> sortedMultiset = ImmutableSortedMultiset.of("B", "A", "C", "D", "A"); //值排序且可重复 /* List<String> list2 = new ArrayList<String>(); list2.add("A"); list2.add("B"); list2.add("C"); ImmutableList<String> imlist = ImmutableList.copyOf(list2); //List拷贝成ImmutableList System.out.println("imlist:" + imlist); */ System.out.println("### list ###"); System.out.println(list); System.out.println(); System.out.println("### map ###"); System.out.println(map); System.out.println(multimap); System.out.println(sortedMap); System.out.println(); System.out.println("### set ###"); System.out.println(set); System.out.println(multiset); System.out.println(sortedSet); System.out.println(sortedMultiset); System.out.println(ImmutableSortedMultiset.copyOf(set)); //ImmutableSet拷贝成ImmutableSortedMultiset
执行结果如下:
### list ###
[B, A, C, D, A]
### map ###
{key2=value2, key1=value1}
{key1=[value11, value1], key2=[value2]}
{key1=value1, key2=value2}
### set ###
[B, A, C, D]
[B, A x 2, C, D]
[A, B, C, D]
[A x 2, B, C, D]
[A, B, C, D]
相关推荐
Immutable 是 Facebook 开发的不可变数据集合。不可变数据一旦创建就不能被修改,是的应用开发更简单,允许使用函数式编程技术,比如惰性评估。Immutable JS 提供一个惰性 Sequence,允许高效的队列方法链,类似 map...
在Kotlin编程语言中,`kotlinx.collections.immutable`是一个重要的库,它提供了不可变集合的实现。不可变集合是一旦创建后就不能修改的集合,这种数据结构在多线程环境、函数式编程和构建安全的数据模型时非常有用...
`immutable.js`库为Node.js开发带来了不可变数据集合的便利,通过引入不可变性和持久化数据,提高了代码的稳定性和性能。结合函数式编程的理念,它为处理复杂状态和并发场景提供了一种强大而优雅的解决方案。在实际...
kotlinx.collections.immutable, Kotlin的不可变集合 Prototype Kotlin的不可变集合库 Kotlin的不可变集合接口和实现 Prototype 。有关详细信息,请参阅建议列表。Prototype实现基于 pcollections ( 版权 2015的作者...
`ImmutableCollection`是所有不可变集合的父接口,它提供了基础的不可变集合操作。`ImmutableList`、`ImmutableSet`和`ImmutableMap`则分别代表了不可变的列表、集合和映射,它们继承自`ImmutableCollection`,并...
首先,标题中提到的“guava不可修改集合”指的是Guava库中的一类集合,它们被设计为不可变。在计算机科学中,“Immutable(不可变)”意味着一个对象一旦创建,其内部状态就不能被修改。对于集合来说,这就意味着...
序列化和恢复不可变集合。 快速开始 import conv from 'immutable-conv' import { is , List , Map } from 'immutable' let lst = List ( [ 3 , 14 , 15 ] ) , serialized = conv . serialize ( lst ) serialized...
在Kotlin编程中,`kotlinx.collections.immutable`库提供了对不可变和持久性集合的支持。这个库是Kotlin生态系统的一部分,旨在帮助开发者构建更安全、更易于维护的代码,尤其是在多线程环境中。不可变集合是那些...
不可变视图-其他集合对象的不可变视图概述immutable-views包提供的集合类是其他(可变)集合对象上的不可变视图: 另一个映射对象的不可变视图。 在另一个列表(序列)对象上的变视图。 在另一个set对象上的变视图。...
通过要求对Immutable进行编辑,不可变集合可以提供高效,无锁的数据共享。此存储库包含Go的不可变集合类型。 它包括List,Map和SortedMap实现。 通过要求对集合的编辑返回新的集合,不可变的集合可以提供有效的,...
ImmutableCollections-基于数组的Java不可变集合 版权所有(c)2017 Nicholas Cull 有关许可信息,请参阅LICENSE.txt。 Java 1.8的基于数组的不可变集合 排序和未排序的变体 风格类似于番石榴收集包装 空友好 Java 8...
而不可变类型(Immutable types),指的是对象的内容一旦创建后就不能被改变,如果要修改,Python会重新在内存中创建一个新的对象来存储新的值,原对象保持不变。不可变类型包括整数(int)、浮点数(float)、字符...
- **不可变集合**:默认导入的包`scala.collection.immutable`中包含了所有不可变集合的实现。 - **可变集合**:要使用可变集合,需要导入包`scala.collection.mutable`。 接下来,我们将详细探讨这三种核心集合...
在JavaScript的世界里,`Immutable`概念的引入是为了创建不可变数据结构,这在处理复杂数据时能带来很多好处,如避免意外修改、提高代码可预测性以及优化性能。`ImmutableArray`是实现这一概念的一个库,它扩展了...
该库的核心概念是不可变数据,即一旦创建,数据就不能被修改。这种设计理念源自函数式编程,能够帮助我们构建更易于理解和调试的代码,同时提升性能,特别是在状态管理和响应式编程场景中。 **不可变数据的好处** ...
4. **不可变集合**:使用`System.Collections.Immutable`库提供的不可变集合,如`ImmutableArray<T>`、`ImmutableDictionary, TValue>`等。 在实际应用中,不可变对象可以带来以下好处: - **线程安全**:不可变...
这意味着你可以直接将不可变对象序列化成JSON格式,或者通过JAX-RS在REST服务中使用,也可以将它们存储在MongoDB这样的NoSQL数据库中。 对于Jackson的集成,只需要添加对应的依赖,Immutables会自动处理不可变对象...