`
raymond.chen
  • 浏览: 1437221 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

不可变集合Immutable的使用

 
阅读更多

不可变集合是不可被修改的。集合的数据项是在创建的时候提供,并且在整个生命周期中都不可改变。

 

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.js.zip

    Immutable 是 Facebook 开发的不可变数据集合。不可变数据一旦创建就不能被修改,是的应用开发更简单,允许使用函数式编程技术,比如惰性评估。Immutable JS 提供一个惰性 Sequence,允许高效的队列方法链,类似 map...

    kotlinx.collections.immutable,Kotlin的不可变集合原型.zip

    在Kotlin编程语言中,`kotlinx.collections.immutable`是一个重要的库,它提供了不可变集合的实现。不可变集合是一旦创建后就不能修改的集合,这种数据结构在多线程环境、函数式编程和构建安全的数据模型时非常有用...

    Node.js-immutable-Javascript不可变的持久化数据集合

    `immutable.js`库为Node.js开发带来了不可变数据集合的便利,通过引入不可变性和持久化数据,提高了代码的稳定性和性能。结合函数式编程的理念,它为处理复杂状态和并发场景提供了一种强大而优雅的解决方案。在实际...

    kotlinx.collections.immutable, Kotlin的不可变集合 Prototype.zip

    kotlinx.collections.immutable, Kotlin的不可变集合 Prototype Kotlin的不可变集合库 Kotlin的不可变集合接口和实现 Prototype 。有关详细信息,请参阅建议列表。Prototype实现基于 pcollections ( 版权 2015的作者...

    不可变对象ImmutableXXX:Collection、List、Set、Map…

    `ImmutableCollection`是所有不可变集合的父接口,它提供了基础的不可变集合操作。`ImmutableList`、`ImmutableSet`和`ImmutableMap`则分别代表了不可变的列表、集合和映射,它们继承自`ImmutableCollection`,并...

    guava不可修改集合

    首先,标题中提到的“guava不可修改集合”指的是Guava库中的一类集合,它们被设计为不可变。在计算机科学中,“Immutable(不可变)”意味着一个对象一旦创建,其内部状态就不能被修改。对于集合来说,这就意味着...

    immutable-conv:序列化和解析不可变集合

    序列化和恢复不可变集合。 快速开始 import conv from 'immutable-conv' import { is , List , Map } from 'immutable' let lst = List ( [ 3 , 14 , 15 ] ) , serialized = conv . serialize ( lst ) serialized...

    kotlinx.collections.immutable:Kotlin的不可变持久集合

    在Kotlin编程中,`kotlinx.collections.immutable`库提供了对不可变和持久性集合的支持。这个库是Kotlin生态系统的一部分,旨在帮助开发者构建更安全、更易于维护的代码,尤其是在多线程环境中。不可变集合是那些...

    immutable-views:其他集合对象的不变视图

    不可变视图-其他集合对象的不可变视图概述immutable-views包提供的集合类是其他(可变)集合对象上的不可变视图: 另一个映射对象的不可变视图。 在另一个列表(序列)对象上的变视图。 在另一个set对象上的变视图。...

    Go的不可变集合-Golang开发

    通过要求对Immutable进行编辑,不可变集合可以提供高效,无锁的数据共享。此存储库包含Go的不可变集合类型。 它包括List,Map和SortedMap实现。 通过要求对集合的编辑返回新的集合,不可变的集合可以提供有效的,...

    java-immutable-collections:Java不可变的基于数组的集合

    ImmutableCollections-基于数组的Java不可变集合 版权所有(c)2017 Nicholas Cull 有关许可信息,请参阅LICENSE.txt。 Java 1.8的基于数组的不可变集合 排序和未排序的变体 风格类似于番石榴收集包装 空友好 Java 8...

    浅谈Python中的可变与不可变数据类型.pdf

    而不可变类型(Immutable types),指的是对象的内容一旦创建后就不能被改变,如果要修改,Python会重新在内存中创建一个新的对象来存储新的值,原对象保持不变。不可变类型包括整数(int)、浮点数(float)、字符...

    Scala-part2集合框架

    - **不可变集合**:默认导入的包`scala.collection.immutable`中包含了所有不可变集合的实现。 - **可变集合**:要使用可变集合,需要导入包`scala.collection.mutable`。 接下来,我们将详细探讨这三种核心集合...

    ImmutableArray原型方法Per方法包的集合

    在JavaScript的世界里,`Immutable`概念的引入是为了创建不可变数据结构,这在处理复杂数据时能带来很多好处,如避免意外修改、提高代码可预测性以及优化性能。`ImmutableArray`是实现这一概念的一个库,它扩展了...

    前端开源库-immutable-ai

    该库的核心概念是不可变数据,即一旦创建,数据就不能被修改。这种设计理念源自函数式编程,能够帮助我们构建更易于理解和调试的代码,同时提升性能,特别是在状态管理和响应式编程场景中。 **不可变数据的好处** ...

    21-C-ImmutableObject-Code.zip

    4. **不可变集合**:使用`System.Collections.Immutable`库提供的不可变集合,如`ImmutableArray&lt;T&gt;`、`ImmutableDictionary, TValue&gt;`等。 在实际应用中,不可变对象可以带来以下好处: - **线程安全**:不可变...

    immutables,用于创建不可变对象和生成器的注释处理器。感觉像是番石榴的不可变集合,但对于常规值对象。包括json、jackson、gson、jax-rs、mongodb集成.zip

    这意味着你可以直接将不可变对象序列化成JSON格式,或者通过JAX-RS在REST服务中使用,也可以将它们存储在MongoDB这样的NoSQL数据库中。 对于Jackson的集成,只需要添加对应的依赖,Immutables会自动处理不可变对象...

Global site tag (gtag.js) - Google Analytics