Guava库学习:学习Collections(九)Immutable collections

    链接地址:http://www.xx566.com/detail/149.html

    上一篇Guava库学习:学习Collections(八)Range中, 我们了解了Guava提供的Range类型,Range实现了Predicate接口,主要用于解决涉及区间的集合类的处理和过滤,本篇,我们继续 Guava Collections的学习:Immutable collections,即不可变集合类型,在之前Guava Collections的学习,我们学习到的如Lists、Sets等工具类,构造的都是不可变的集合类型,但现实的业务中,我们也经常需要确保一个不可 变的集合,Guava为我们提供了Immutable collections。

 

    在现实的业务逻辑中,我们经常会遇到并发问题,我们需要提供一些线程安全的类来避免并发引起的资源竞争问题,Guava为我们提供了Immutable collections,不可变集合,它是线程安全的。List、Set、Map这些常用的集合类型,Guava都为我们提供了相应的不可变集合类,分别 是:ImmutableList、ImmutableSet、ImmutableMap。

 

    比较ImmutableList、ImmutableSet、ImmutableMap等不可变集合的源码,我们会发现,所有不可变集合的内部都提供了一个静态的Builder类,这是典型的建造者模式的应用(更多建造者模式,请参阅:揭秘设计模式:建造者模式(Builder)的理解和学习),同时内部也都提供了相同的创建方法,分别是copyOf()、of()方法,接下来,我们主要来研究学习一下这两个方法。

    

    of():of方法进行了大量的重载,以创建不同长度的不可变集合,不过所有不可变集合的实现对不接受null值作为元素。

    copyOf():返回一个包含指定元素的不可变集合,传入的元素中不允许有null值。

 

    接下来,我们通过示例代码来继续进行Immutable collections的学习,主要是了解不可变集合的创建,不可变集合的操作等方法不再赘述,与可变集合一致,代码如下:

package guava;
 
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import org.junit.Test;
 
import java.util.HashMap;
 
/**
 * Immutable Collections:不可变集合
 * User: Realfighter
 * Date: 2014/10/19
 * Time: 21:56
 */
public class ImmutableCollectionsTest {
 
    @Test
    public void testImmutableCollections() {
 
        //builder模式创建不可变Set集合
        ImmutableSet<String> immutableSetByBuilder = ImmutableSet
                .<String>builder().add("First")
                .addAll(Lists.asList("Second", new String[]{"Third"}))
                .build();
        //of方法创建不可变Set集合
        ImmutableSet<String> immutableSetByOf = ImmutableSet
                .<String>of("First", "Second", "Third");
        //copyOf方法创建不可变Set集合
        ImmutableSet<String> immutableSetByCopyOf = ImmutableSet
                .<String>copyOf(new String[]{"First", "Second", "Third"});
 
        //builder模式创建不可变List集合
        ImmutableList<String> immutableListByBuilder = ImmutableList
                .<String>builder().add("First")
                .addAll(Lists.asList("Second", new String[]{"Third"}))
                .build();
        //of方法创建不可变List集合
        ImmutableList<String> immutableListByOf = ImmutableList
                .<String>of("First", "Second", "Third");
        //copyOf方法创建不可变List集合
        ImmutableList<String> immutableListByCopyOf = ImmutableList
                .<String>copyOf(new String[]{"First", "Second", "Third"});
 
        //builder模式创建不可变Map集合
        ImmutableMap<String, String> immutableMapByBuilder = ImmutableMap
                .<String, String>builder().put("First", "1")
                .putAll(new HashMap<String, String>() {
                    {
                        put("Second", "2");
                        put("Third", "3");
                    }
                }).build();
        //of方法创建不可变Map集合
        ImmutableMap<String, String> immutableMapByOf = ImmutableMap
                .<String, String>of("First", "1", "Second", "2", "Third", "3");
        //copyOf方法创建不可变Map集合
        ImmutableMap<String, String> immutableMapByCopyOf = ImmutableMap
                .<String, String>copyOf(new HashMap<String, String>() {
                    {
                        put("First", "1");
                        put("Second", "2");
                        put("Third", "3");
                    }
                });
    }
}


你可能感兴趣的:(guava,Collections,immutable)