Googgle guava ImmutableCollections

何玺
2023-12-01

Googgle guava ImmutableCollections

参考文档

Google Guava ImmutableCollections官方文档

Immutable objects have many advantages(不可变类有很多的好处)

  1. Safe for use by untrusted libraries(安全的使用不受信任的库),我记得Effective Java中看到过,由于传递的是集合或者对象,这会导致很多的情况,外部可能会改变这个传入的对象,或者当前类返回出去的集合或者对象也可能会使用者破坏当前返回的引用的信息,所以要保护好,得到的和出去的不会被外人破坏。
  2. Thread-safe: can be used by many threads with no risk of race conditions.(线程安全:可以被许多线程使用,没有竞争条件的风险) 每个线程都是获取到了一个不可变类的一个副本。
  3. 可以用作常数,期望它将保持固定。
  4. 制作不可变的对象副本是一个很好的防御编程技术a good defensive programming technique
  5. 当您不希望修改集合,或期望集合保持不变时,防御性地将其复制到不可变集合中是一个很好的做法。

怎么创建不可变类

  • copyOf()
 public static void  usingCopyOf(){
        Set<Integer> set = new HashSet<Integer>();
        set.add(1);
        set.add(2);
        ImmutableSet<Integer> immutableSet = ImmutableSet.copyOf(set);
        //这里是不支持添加元素的
        /*immutableSet.add(4);
        Set<Integer> addOne = new HashSet<>();
        addOne.add(5);
        immutableSet.addAll(addOne);*/
    }
  • of()
    of 方法重载了很多的个数,最后一个是可以随意的扩展参数。
 public static void  usingOf(){
        ImmutableSet<Integer> ofSet = ImmutableSet.of(1,2,3,4,5,6,7);
        System.out.println(ofSet);
}
  • 使用建筑者模式创建
 public static  void usingBuilder(){
        ImmutableSet<Integer> builderSet = ImmutableSet.<Integer>builder()
                .add(1)
                .add(2)
                .build();
        System.out.println(builderSet);
}

  /**
   * Returns a new builder. The generated builder is equivalent to the builder
   * created by the {@link Builder} constructor.
   */
  public static <E> Builder<E> builder() {
    return new Builder<E>();
  }
  • asList()
    所有不可变的集合提供了一个ImmutableList视图asList()即使你有数据存储为一个ImmutableSortedSet,你可以得到k最小的元素sortedSet.asList().get(k)。

主要的集合

可变集合类型可变集合源:JDK or GuavaGuava不可变集合
CollectionJDKImmutableCollection
ListJDKImmutableList
SetJDKImmutableSet
SortedSet/NavigableSetJDKImmutableSortedSet
MapJDKImmutableMap
SortedMapJDKImmutableSortedMap
MultisetGuavaImmutableMultiset
SortedMultisetGuavaImmutableSortedMultiset
MultimapGuavaImmutableMultimap
ListMultimapGuavaImmutableListMultimap
SetMultimapGuavaImmutableSetMultimap
BiMapGuavaImmutableBiMap
ClassToInstanceMapGuavaImmutableClassToInstanceMap
TableGuavaImmutableTable

接下来就是了解这些集合啦

 类似资料:

相关阅读

相关文章

相关问答