1. 程式人生 > 其它 >guava集合類(轉載)

guava集合類(轉載)

轉載:https://www.cnblogs.com/moongeek/p/12831296.html

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

2. Multiset#

定義摘自維基百科:

”集合[set]概念的延伸,它的元素可以重複出現…與集合[set]相同而與元組[tuple]相反的是,Multiset元素的順序是無關緊要的:Multiset {a, a, b}和{a, b, a}是相等的”

Multiset繼承自JDK中的Collection介面,而不是Set介面,所以可以包含重複元素。可以從以下角度理解:

  • 沒有元素順序限制的ArrayList
  • Map<E, Integer>,鍵為元素,值為計數

Multiset提供像無序的ArrayList的基本操作:

  • add(E)新增單個給定元素
  • iterator()返回一個迭代器,包含Multiset的所有元素(包括重複的元素)
  • size()返回所有元素的總個數(包括重複的元素)

當把Multiset看作Map<E, Integer>時,它也提供了Map的查詢操作:

  • count(Object)返回給定元素的計數。
  • entrySet()返回Set<Multiset.Entry>,和Map的entrySet類似。
  • elementSet()返回所有不重複元素的Set,和Map的keySet()類似。

常用方法如下:

應用:統計一個詞在文件中出現了多少次。

  1. 傳統的做法是這樣的

    Copy
  2. 使用Multiset操作:

    Copy

3. Multimap#

通俗來講,Multimap是一鍵對多值的HashMap,類似於Map<K, List>的資料結構。

Copy

輸出:

Copy

常用操作如下:

主要操作:

  • asMap:為Multimap<K, V>提供Map<K,Collection>形式的檢視
  • entries:返回所有”鍵-單個值對映”,包括重複鍵。Collection<Map.Entry<K, V>>型別
  • keySet:返回所有不同的鍵,Set型別
  • keys:用Multiset表示Multimap中的所有鍵,每個鍵重複出現的次數等於它對映的值的個數。可以從這個Multiset中移除元素,但不能做新增操作;移除操作會反映到底層的Multimap
  • values:用一個”扁平”的Collection包含Multimap中的所有值,包括重複鍵

4. BiMap#

一般的Map只提供”鍵-值“的對映,而BiMap則同時提供了”鍵-值“和”值-鍵“的對映關係。常用方法:

  • put(K key, V value):新增新的鍵、值。如果值和已有鍵重複,會丟擲異常

  • forcePut(K key, V value):新增新的鍵、值。如果值和已有鍵重複,會覆蓋原來的鍵、值

  • inverse():得到”值-鍵“的BitMap物件

Copy

輸出:

Copy

5. Table#

Table類似多個索引的表,類似Map<R, Map<C, V>>的資料結構。它有兩個支援所有型別的鍵:”行”和”列”,可以通過以下方法獲取多個檢視:

  • rowMap():用Map<R, Map<C, V>>表現Table<R, C, V>。同樣的,rowKeySet()返回”行”的集合Set。
  • row(r):用Map<C, V>返回給定”行”的所有列,對這個map進行的寫操作也將寫入Table中。
  • cellSet():用元素型別為Table.Cell的Set表現Table<R, C, V>。Cell類似於Map.Entry,但它是用行和列兩個鍵區分的。