guava集合類(轉載)
阿新 • • 發佈:2021-10-02
轉載: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()類似。
常用方法如下:
應用:統計一個詞在文件中出現了多少次。
-
傳統的做法是這樣的
Copy -
使用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物件
輸出:
Copy5. 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,但它是用行和列兩個鍵區分的。