Guava學習總結之 - 6 - Collections - Immutable collections

不可變集合應該在一切能後使用的場合使用,因爲

  1. 如果程序內使用了非安全的庫,那麼我們能夠保證傳入的集合不會被修改。

  2. 線程安全

  3. 內存使用更加高效。

  4. 可以作爲一個常量,被任何地方直接引用


Guava給自己特有和JAVA本地的一些集合實提供了對應的不可變版本如下:


CollectionJDKImmutableCollection
ListJDKImmutableList
SetJDKImmutableSet
SortedSet/NavigableSetJDKImmutableSortedSet
MapJDKImmutableMap
SortedMapJDKImmutableSortedMap
MultisetGuavaImmutableMultiset
SortedMultisetGuavaImmutableSortedMultiset
MultimapGuavaImmutableMultimap
ListMultimapGuavaImmutableListMultimap
SetMultimapGuavaImmutableSetMultimap
BiMapGuavaImmutableBiMap
ClassToInstanceMapGuavaImmutableClassToInstanceMap
TableGuavaImmutableTable



並且Guava提供了三種構造他們的方法: 

  1. 使用集合的靜態的copyOf方法, 例如 ImmutableSet.copyOf(set)

  2. 直接指定集合元素, 例如 ImmutableSet.of("a", "b", "c") 

3. 通過Build方法 例如

ublic static final ImmutableSet<Color> GOOGLE_COLORS =
       
ImmutableSet.<Color>builder()
           
.addAll(WEBSAFE_COLORS)
           
.add(new Color(0, 191, 255))
           
.build();


此外另外值得一提的就是Guava爲所有的不可變集合都提供了asList()方法,它返回一個不可變List, 使我們能夠很快查詢集合中第#個元素。 Guava在文檔中集合的copyOf()在某些時候能到達線性時間,它列出了三點。其實看源碼就知道Guava 是想近一切辦法返回傳入集合的變形,如果是這樣就是花費常量時間,否則就需要查看底層元素重新COPY出一個集合出來,這就變成了線性時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章