Java集合類匯總記錄--guava篇
BiMap
HashBiMap<K,V>
實現了兩份哈希表數據結構(本類獨立實現)。分別負責兩個方向的映射。
EnumBiMap<K,V>
兩個EnumMap對象分別負責兩個方向的映射。
EnumHashBiMap<K,V>
一個EnumMap對象負責K到V映射,一個HashMap對象負責V到K的影身。
MultiMap
HashMultimap<K,V>
使用HashMap<K,HashSet<V>>對象實現。
TreeMultimap<K,V>
使用TreeMap<K,TreeSet<V>>實現。
ArrayListMultimap
使用HashMap<K, ArrayList<V>>實現。
LinkedHashMultimap
使用LinkedHashMap<K, LinkedHashSet<V>>實現。
LinkedListMultimap<K,V>
使用HashMap<K, class KeyList<K,V>>實現。
KeyList是一個雙向鏈表類。保存了一個特定的K。相應的全部Value的值。
另外,LinkedListMultimap還維護了一個由Map中全部的Entry組成的雙向鏈表。
由兩種雙向鏈表保證叠代的順序。
MultiSet
HashMultiset
使用HashMap<K, class Count>實現。Count是一個計數的類。
LinkedHashMultiset
使用LinkedHashMap<K, classCount>實現。
TreeMultiset
獨立實現了一個AVL樹。樹的每一個節點保存了一個int類型的字段,表示元素數量。
ConcurrentHashMultiset
使用ConcurrentHashMap<E,AtomicInteger>實現。
EnumMultiset
使用EnumMap<E, Count>實現。
Table
ArrayTable<R,C,V>
固定大小的二維數組,創建的時候須要指定R和C的有效對象列表。以後不能改動。
內部包括三個數據結構:(1) V的數組,長度為行數量*列數量。(2) 從R對象到index的ImmutableMap。
(3)從C對象到index的ImmutableMap。
HashBasedTable<R,C,V>
內部實現上採用了HashMap<R,HashMap<C,V>>的形式。
TreeBasedTable<R,C,V>
內部實現上採用了TreeMap<R, TreeMap<C,V>>的形式。
MutableClassToInstanceMap
從類到類實例的映射。
TreeRangeSet/TreeRangeMap
特點:Key是一個區間。
僅僅讀集合類
特點:一旦創建後就無法改動。
Interface |
JDK or Guava? |
Immutable Version |
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 |
Java集合類匯總記錄--guava篇