guava之ImmutableList三种初始化方式的使用实例

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

为什么要用immutable对象?immutable对象有以下的优点:

    1.对不可靠的客户代码库来说,它使用安全,可以在未受信任的类库中安全的使用这些对象
    2.线程安全的:immutable对象在多线程下安全,没有竞态条件
    3.不需要支持可变性, 可以尽量节省空间和时间的开销. 所有的不可变集合实现都比可变集合更加有效的利用内存 (analysis)
    4.可以被使用为一个常量,并且期望在未来也是保持不变的

immutable对象可以很自然地用作常量,因为它们天生就是不可变的对于immutable对象的运用来说,它是一个很好的防御编程(defensive programming)的技术实践。

Immutable集合使用方法:

  一个immutable集合可以有以下几种方式来创建:
  1.用copyOf方法, 譬如, ImmutableSet.copyOf(set)
  2.使用of方法,譬如,ImmutableSet.of("a", "b", "c")或者ImmutableMap.of("a", 1, "b", 2)
  3.使用Builder类  

以这个ImmutableList为例,来看看怎么初始化。

package com.lxk.guavaTest;

import com.google.common.collect.ImmutableList;

import java.util.List;

/**
 * @author lxk on 2017/11/7
 */
public interface ConstantList {

    /**
     * 有时候,我们可能需要在代码里面使用一个包含许多常量的list
     * 不可变集合。。。
     */
    List<String> CONSTANT_LIST =
            new ImmutableList.Builder<String>()
                    .add("平均值")
                    .add("总值")
                    .add("最大值")
                    .add("最小值")
                    .build();

    /*
     * 推荐使用上面的写法,样式好看,且好维护,也就是说,你现在要删除或者添加一条,直接添加一行就好。常量整体也看着条理清晰。
     */
    //List<String> CONSTANT_LIST = ImmutableList.of("平均值","总值","最大值","最小值");

    //List<String> CONSTANT_LIST = ImmutableList.copyOf(Lists.newArrayList("平均值","总值","最大值","最小值"));
}

因为是当常量集合使用的,所以说,就得单独放在某个单独的文件里面。

package com.lxk.guavaTest;

/**
 * guava ImmutableMap 测试实例
 *
 * @author lxk on 2017/11/7
 */
public class ImmutableListTest {
    public static void main(String[] args) {
        String string = "最大值";
        if (ConstantList.CONSTANT_LIST.contains(string)) {
            System.out.println("常量list集合包含此 String");
        }
        //此常量list不能add,remove,不然会抛异常的。
        //ConstantList.CONSTANT_LIST.add("sss");
        //ConstantList.CONSTANT_LIST.remove(string);
    }
}

其实,就是生成个常量的集合,这个常量 集合略显高级而已。。。具体高级的地方,在文章开头已经介绍过啦。

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页