1.Multiset
在Collection的基礎(chǔ)上囱怕,拓展了對重復(fù)元素的處理方法旦万。
public?interface?Multiset?extends?Collection<E> {
????int?count(@Nullable?Object var1);
????int?add(@Nullable?E var1,?int?var2);
????int?remove(@Nullable?Object var1,?int?var2);
????int?setCount(E var1,?int?var2);
????boolean?setCount(E var1,?int?var2,?int?var3);
????Set<E> elementSet();
????Set<Multiset.Entry<E>> entrySet();
????boolean?equals(@Nullable?Object var1);
????int?hashCode();
????String toString();
????Iterator<E> iterator();
????boolean?contains(@Nullable?Object var1);
????boolean?containsAll(Collection<?> var1);
????boolean?add(E var1);
????boolean?remove(@Nullable?Object var1);
????boolean?removeAll(Collection<?> var1);
????boolean?retainAll(Collection<?> var1);
????public?interface?Entry<E> {
????????E getElement();
????????int?getCount();
????????boolean?equals(Object var1);
????????int?hashCode();
????????String toString();
????}
}
2.Multimap
內(nèi)部實現(xiàn)了Map<K, List<V>>?or?Map<K, Set<V>>,Multimap 提供了一個方便地把一個鍵對應(yīng)到多個值的數(shù)據(jù)結(jié)構(gòu)饶深。
特點:不會有任何鍵映射到空集合:一個鍵要么至少到一個值屁药,要么根本就不在Multimap中。
public?interface?Multimap<K, V> {
????int?size();
????boolean?isEmpty();
????boolean?containsKey(@Nullable?Object var1);
????boolean?containsValue(@Nullable?Object var1);
????boolean?containsEntry(@Nullable?Object var1,?@Nullable?Object var2);
????boolean?put(@Nullable?K var1,?@Nullable?V var2);?//添加單個鍵值對
????boolean?remove(@Nullable?Object var1,?@Nullable?Object var2);?//移除鍵到值的映射迟几,如果有這樣的鍵值就移除并返回true
????boolean?putAll(@Nullable?K var1, Iterable var2);?//依次添加鍵到多個值映射
????boolean?putAll(Multimap
????Collection<V> replaceValues(@Nullable?K var1, Iterable var2);?//清除鍵對應(yīng)的所有值,并重新把key關(guān)聯(lián)到迭代器的每個元素中栏笆,返回元素包含之前所有映射
????Collection<V> removeAll(@Nullable?Object var1);
????void?clear();
????Collection<V> get(@Nullable?K var1);?//得到鍵對應(yīng)的值的集合
????Set<K> keySet();
????Multiset<K> keys();
????Collection<V> values();
????Collection<Entry<K, V>> entries();
????Map<K, Collection<V>> asMap();
????boolean?equals(@Nullable?Object var1);
????int?hashCode();
}
3.BiMap
雙向map类腮,能通過Key與values之間可以互相查找
BiMap接口的實現(xiàn)
public?interface?BiMap?extends?Map<K, V> {
?V put(K key,? V value);?//存放鍵值,存放的值已經(jīng)存在在另一個Key中時會拋出? IllegalArgumentException異常
?V forcePut( K key,? V value);?//強制放入蛉加,會把之前存在的鍵值刪除重新放入存哲。
?void?putAll(Map
?Set values();?//返回值的Set
?BiMap inverse();?//反響查找,即通過調(diào)用反向查找七婴,可以通過.get方法獲得對應(yīng)的key
}
常用實現(xiàn)
HashBiMap: key 集合與 value 集合都有 HashMap 實現(xiàn)
EnumBiMap: key 與 value 都必須是 enum 類型
ImmutableBiMap: 不可修改的 BiMap
4.Table
? ? ?Table是Guava提供的一個接口?Interface Table<R,C,V>,由rowKey+columnKey+value組成?它有兩個鍵察滑,一個值打厘,和一個n行三列的數(shù)據(jù)表類似,n行取決于Table對對象中存儲了多少個數(shù)據(jù)贺辰。個人理解户盯,相當(dāng)于一個二維數(shù)組,行列兩個元素確定一個values值
? ?實際上實現(xiàn)為饲化,Map> 這樣的形式
public?interface?Table<R, C, V> {
????boolean?contains(@Nullable?Object var1,?@Nullable?Object var2);?//類內(nèi)部實現(xiàn)為? 調(diào)用containsRow和containsColumn
????boolean?containsRow(@Nullable?Object var1);
????boolean?containsColumn(@Nullable?Object var1);
????boolean?containsValue(@Nullable?Object var1);
????//以上是確定 是否包含行 列 值
????V get(@Nullable?Object var1,?@Nullable?Object var2);
????// 通過 行列值得到鍵
????boolean?isEmpty();//判斷是否為空
????int?size();?//返回map的 值的個數(shù)
????boolean?equals(@Nullable?Object var1);?
????int?hashCode();
????void?clear();//清除所有 cell
????V put(R var1, C var2, V var3);?//存放
????void?putAll(Table
????V remove(@Nullable?Object var1,?@Nullable?Object var2);?//先用R也就是行去獲得了列的map莽鸭,然后再用列的map去做具體處理。
????Map row(R var1);?//取得 row map
????Map column(C var1);?//取得 colum map
????Set<Table.Cell<R, C, V>> cellSet();
????Set<R> rowKeySet();
????Set<C> columnKeySet();
????Collection values();?//得到Collection
????Map> rowMap();?//返回 列map
????Map> columnMap();?//返回行map
????public?interface?Cell<R, C, V> {
????????R getRowKey();
????????C getColumnKey();
????????V getValue();
????????boolean?equals(@Nullable?Object var1);
????????int?hashCode();
????}
}
5. ClassTolnstanceMap
ClassToInstanceMap提供了一種是用Class作為Key, 對應(yīng)實例作為Value的途徑.他定義了T getInstance(Class<T>)和T putInstance(Class<T> T)兩個方法, 這兩個方法消除了元素類型轉(zhuǎn)換的過程并保證了元素在Map中是類型安全的.
public?interface?ClassToInstanceMap?extends?Map
???? T putInstance(Class var1,?@Nullable?T var2);
}
ClassToInstanceMap<Number> map = MutableClassToInstanceMap.create();
map.putInstance(Integer.class, Integer.valueOf(0));
map.putInstance(Integer.class,?100);
map.putInstance(Float.class,?10.01f);
TestDemo testDemo =?new?TestDemo();
ClassToInstanceMap<TestDemo> map1= MutableClassToInstanceMap.create();
map1.putInstance(TestDemo.class,testDemo);
System.out.println(map.getInstance(Integer.class));
System.out.println(map.getInstance(Float.class));
map1.getInstance(TestDemo.class).show();
//他是一個由B的子類和B的實例構(gòu)成的Map -- 通常, B就是Object
6.RangeSet
RangeSet類是用來存儲一些不為空的也不相交的范圍的數(shù)據(jù)結(jié)構(gòu)
Guava 中定義了 Range Range定義了連續(xù)跨度的范圍邊界吃靠,這個連續(xù)跨度是一個可以比較的類型(Comparable type)硫眨。比如1到100之間的整型數(shù)據(jù)。
Guava Range 概念巢块,范圍和方法
概念表示范圍guava對應(yīng)功能方法
(a..b){x | a < x < b}open(C, C)
[a..b]{x | a <= x <= b}?closed(C, C)
[a..b){x | a <= x < b}closedOpen(C, C)
(a..b]{x | a < x <= b}openClosed(C, C)
(a..+∞){x | x > a}greaterThan(C)
[a..+∞){x | x >= a}atLeast(C)
(-∞..b){x | x < b}lessThan(C)
(-∞..b]{x | x <= b}atMost(C)
(-∞..+∞)all valuesall()
public?interface?RangeSet
????boolean?contains(C var1);
????Range<C> rangeContaining(C var1);
????boolean?encloses(Range<C> var1);
????boolean?enclosesAll(RangeSet<C> var1);
????boolean?isEmpty();
????Range<C> span();
????Set<Range<C>> asRanges();
????RangeSet<C> complement();
????RangeSet<C> subRangeSet(Range<C> var1);
????void?add(Range<C> var1);
????void?remove(Range<C> var1);
????void?clear();
????void?addAll(RangeSet<C> var1);
????void?removeAll(RangeSet<C> var1);
????boolean?equals(@Nullable?Object var1);
????int?hashCode();
????String toString();
}