美文网首页
guava不变集合总结

guava不变集合总结

作者: hehehehe | 来源:发表于2020-12-29 18:32 被阅读0次

immutable

可变集合类型  可变集合源:JDK or Guava? Guava不可变集合
Collection  JDK ImmutableCollection
List    JDK ImmutableList
Set JDK ImmutableSet
SortedSet/NavigableSet  JDK ImmutableSortedSet
Map JDK ImmutableMap
SortedMap   JDK ImmutableSortedMap
Multiset    Guava   ImmutableMultiset
SortedMultiset  Guava   ImmutableSortedMultiset
Multimap    Guava   ImmutableMultimap
ListMultimap    Guava   ImmutableListMultimap
SetMultimap Guava   ImmutableSetMultimap
BiMap   Guava   ImmutableBiMap
ClassToInstanceMap  Guava   ImmutableClassToInstanceMap
Table   Guava   ImmutableTable
总结一下JDK的Collections.unmodifiableXXX方法实现不可变集合的一些问题:

1.它用起来笨拙繁琐你不得不在每个防御性编程拷贝的地方用这个方法
2.它不安全:如果有对象reference原始的被封装的集合类,这些方法返回的集合也就不是正真的不可改变。
3.效率低:因为它返回的数据结构本质仍旧是原来的集合类,所以它的操作开销,包括并发下修改检查,hash table里的额外数据空间都和原来的集合是一样的。

一个immutable集合可以有以下几种方式来创建:

1.用copyOf方法, 譬如, ImmutableSet.copyOf(set)
2.使用of方法,譬如,ImmutableSet.of("a", "b", "c")或者ImmutableMap.of("a", 1, "b", 2)
3.使用Builder类

asList方法

所有的immutable集合都以asList()的形式提供了ImmutableList视图(view)。譬如,你把数据放在ImmutableSortedSet,你就可以调用sortedSet.asList().get(k)来取得前k个元素的集合。
返回的ImmutableList常常是个常数复杂度的视图,而不是一个真的拷贝。也就是说,这个返回集合比一般的List更智能-譬如,它会更高效地实现contains这样的方法。

相关文章

网友评论

      本文标题:guava不变集合总结

      本文链接:https://www.haomeiwen.com/subject/jrkqoktx.html