1.Multiset
在Collection的基础上,拓展了对重复元素的处理方法。
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
内部实现了Map<K, List<V>> or Map<K, Set<V>>,Multimap 提供了一个方便地把一个键对应到多个值的数据结构。
特点:不会有任何键映射到空集合:一个键要么至少到一个值,要么根本就不在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); //清除键对应的所有值,并重新把key关联到迭代器的每个元素中,返回元素包含之前所有映射
Collection<V> removeAll(@Nullable Object var1);
void clear();
Collection<V> get(@Nullable K var1); //得到键对应的值的集合
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接口的实现
public interface BiMap extends Map<K, V> {
V put(K key, V value); //存放键值,存放的值已经存在在另一个Key中时会抛出 IllegalArgumentException异常
V forcePut( K key, V value); //强制放入,会把之前存在的键值删除重新放入。
void putAll(Map
Set values(); //返回值的Set
BiMap inverse(); //反响查找,即通过调用反向查找,可以通过.get方法获得对应的key
}
常用实现
HashBiMap: key 集合与 value 集合都有 HashMap 实现
EnumBiMap: key 与 value 都必须是 enum 类型
ImmutableBiMap: 不可修改的 BiMap
4.Table
Table是Guava提供的一个接口 Interface Table<R,C,V>,由rowKey+columnKey+value组成 它有两个键,一个值,和一个n行三列的数据表类似,n行取决于Table对对象中存储了多少个数据。个人理解,相当于一个二维数组,行列两个元素确定一个values值
实际上实现为,Map> 这样的形式
public interface Table<R, C, V> {
boolean contains(@Nullable Object var1, @Nullable Object var2); //类内部实现为 调用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的 值的个数
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, 对应实例作为Value的途径.他定义了T getInstance(Class<T>)和T putInstance(Class<T> T)两个方法, 这两个方法消除了元素类型转换的过程并保证了元素在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的实例构成的Map -- 通常, B就是Object
6.RangeSet
RangeSet类是用来存储一些不为空的也不相交的范围的数据结构
Guava 中定义了 Range Range定义了连续跨度的范围边界,这个连续跨度是一个可以比较的类型(Comparable type)。比如1到100之间的整型数据。
Guava Range 概念,范围和方法
概念表示范围guava对应功能方法
(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();
}