guava中ImmutableTable使用详解

ImmutableTable是一个不可变的、线程安全的、两个元素作为key且key不可以重复的二维矩阵类型集合,它跟其它的元素一样会复制加入元素的一个副本而不会改变原来的对象;
示例代码如下:

        ImmutableTable<Integer, Integer, Integer> table = ImmutableTable.<Integer, Integer, Integer>builder()
                .put(1, 2, 2)
                .put(1,2,3)
                .build();

运行结果是:

Exception in thread "main" java.lang.IllegalArgumentException: duplicate key: (1, 2)
    at com.google.common.base.Preconditions.checkArgument(Preconditions.java:119)
    at com.google.common.collect.RegularImmutableTable$DenseImmutableTable.<init>(RegularImmutableTable.java:471)
    at com.google.common.collect.RegularImmutableTable.forCellsInternal(RegularImmutableTable.java:163)
    at com.google.common.collect.RegularImmutableTable.forCells(RegularImmutableTable.java:124)
    at com.google.common.collect.ImmutableTable$Builder.build(ImmutableTable.java:237)
    at ggindex.v2.indexindustry.action.Test.main(Test.java:15)

从上面错误可以知道ImmutableTable的双key确定的二维点是不可以重复的,如果重复就会抛出异常。

ImmutableTable对象的构建可以通过两种方式,一种是静态of方法,一种是静态内部类。

  • 静态内部类方式
        ImmutableTable<Integer, Integer, Integer> table = ImmutableTable.<Integer, Integer, Integer>builder()
                                                                            .put(1, 2, 2)
                                                                            .put(1,3,3)
                                                                            .build();
  • 静态of方法
ImmutableTable<Integer, Integer, Integer> table = ImmutableTable.<Integer, Integer, Integer>of(1, 2, 2).of(1, 3, 3);
  • 从其它的table集合中复制数据
ImmutableTable<Integer, Integer, Integer> table = ImmutableTable.<Integer, Integer, Integer>copyOf(table)

猜你喜欢

转载自blog.csdn.net/yaomingyang/article/details/80935483