5 com.google.common.collect:包括常用的 collection接口和实现,以及相关的工具类。
接口:
5.1 BiMap<K, V>:继承 Map<K, V>接口。这个 Map要求键和值都是独一无二的,不能有相同的键或值,使得 BiMap的键值互换后也是一个 BiMap。它定义了 inverse()方法,用于返回键值互换后的 BiMap。
5.2 ClassToInstanceMap<B>:继承 Map<Class<? extends B>, B>接口。通过类获取相应类的实例。定义了两个方法: getInstance(Class<T>):T, putInstance(Class<T>, T):T。
5.3 Constraint<E>: checkElement(E element):如果 element满足条件则返回 element,否则抛出异常。
5.4 Interner<E>:对不可改变的类型提供类似于 String.intern的功能。定义了一个方法: intern(E sample):E。
5.5 Multimap<K, V>:继承 Map<K, V>接口,允许一个键对应多个值。
5.6 ListMultimap<K, V>:继承 Multimap<K, V>接口,允许有重复的键值对,对于一个给定的 key,插入的 value按照插入的顺序排序。
5.7 MapConstraint<K, V>:对将要被插入 Map或 Multimap的 key和 value的约束。 定义了一个方法: checkKeyValue(K key, V value)。
5.8 MapDifference<K, V>:这个接口用于描述两个 Map之间的差异。
5.9 MapDifference.ValueDifference<V>:这个接口用于描述两个 Map的同一个 key映射的 value之间的不同。
5.10 MapEvictionListener<K, V>:当一个 entry从 map中被赶出 ?时,这个接口用于接收通知。它的实例可能被多个线程调用。
5.11 Multiset<E>:继承 Collection<E>接口,允许有重复的元素,也被称作” bag“。
5.12 Multiset.Entry<E>: multiset的元素 -数量对,是不可修改的。
5.13 PeekingIterator<E>:继承 Iterator<E>接口。增加了迭代时元素的前视功能,调用 peek()可以获得下一个元素,但是不会改变 Iterator的状态。
5.14 Table<R, C, V>:有一对有序的 key和一个 value, key分别称为行 key和列 key。一个 table可能是个稀疏表,只有一小部分表格元素有值。
5.15 Table.Cell<R, C, V>:由行 key、列 key和 value组成的三元组。
5.16 RowSortedTable<R, C, V>:继承 Table<R, C, V>接口,对行进行排序。
5.17 SetMultimap<K, V>:继承 Multimap<K, V>接口,不允许有重复的键值对,插入 map中已经有的键值对不会产生效果。
5.18 SortedSetMultimap<K, V>:继承 SetMultimap<K, V>接口,对同一个 key的多个 value按序保存。
5.19 SortedMapDifference<K, V>:继承 MapDifference<K, V>接口,用于描述两个 sorted map之间的差异。
类:
5.20 ForwardingObject:抽象类,这个类实现了装饰器模式,有一个抽象方法: delegate(): Object。
5.21 ForwardingMap<K, V>、 ForwardingCollection<E>、 ForwardingIterator<T>、 ForwardingMapEntry<K, V>、 ForwardingMultimap<K, V>、 ForwardingTable<R, C, V>:抽象类,继承了 ForwardingObject,实现了相应接口。有一个抽象方法: delegate()。
5.22 AbstractBiMap<K, V>:抽象类,继承 ForwardingMap<K, V>,实现 BiMap<K, V>接口。 内部包装了一个 Map。
5.23 AbstractMapEntry<K, V>:抽象类,实现了 java的 Entry<K, V>接口,主要实现了 equals()、 hashCode()、 toString()方法。
5.24 AbstractMultimap<K, V>:抽象类,实现了 Multimap<K, V>接口。
5.25 AbstractMultiset<E>:抽象类,继承自 AbstractCollection<E>,实现了 Multiset<E>接口。
5.26 AbstractSetMultimap<K, V>:抽象类,继承自 AbstractMultimap<K, V>,实现了 SetMultimap<K,V>。
5.27 AbstractSortedSetMultimap<K, V>:抽象类,继承自 AbstractSetMultimap<K, V>,实现了 SortedSetMultimap<K,V>。
5.28 AbstractListMultimap<K,V>:抽象类,继承自 AbstractMultimap<K, V>,实现了 ListMultimap<K,V>。
5.29 AbstractMapBasedMultiset<E>:抽象类,继承自 AbstractMultiset<E>。内部包装了一个 Map, key是 set的元素, value是该元素的数量。
5.30 UnmodifiableIterator<E>:抽象类,实现了 Iterator<E>,不支持 remove()方法,该方法会抛出异常。
5.31 AbstractIterator<T>:抽象类,继承 UnmodifiableIterator<T>。
5.32 UnmodifiableListIterator<T>:抽象类,继承 UnmodifiableIterator<T>,实现了 ListInterator<T>接口。
5.33 AbstractIndexedListIterator<T>:抽象类,继承 UnmodifiableListIterator <T>。
5.34 AbstractLinkedIterator<T>:抽象类,继承 UnmodifiableIterator <T>。
5.35 ArrayListMultimap<K,V>:继承 AbstractListMultimap<K,V>类。
5.36 Ordering<T>:抽象类,实现了 Comparator<T>接口。增加了一些方法以支持常用的功能。
5.37 NaturalOrdering<T>:继承 Ordering<T>类。两个比较对象的大小由比较对象的 compareTo()决定。
5.38 ReverseNaturalOrdering<T>:继承 Ordering<T>类。与 NaturalOrdering<T>的比较结果相反。
5.40 ExplicitOrdering<T>:继承 Ordering<T>类。两个比较对象的大小由给定顺序决定。
5.41 UsingToStringOrdering:继承 Ordering<T>类。将被比较对象的 toString()结果按照字符串的 compareTo()进行比较。
5.42 CompoundOrdering<T>:继承 Ordering<T>类。 按多种 Ordering的复合比较。
5.43 ByFunctionOrdering<F,T>:继承 Ordering<T>类。对被比较对象调用方法 F,将结果按内部包装的 ordering进行比较。
5.44 LexicographicalOrdering<T>: 继承 Ordering<Iterable<T>>类。内部包装了一个 ordering对象,对可迭代的两个被比较对象按字典序,用内部的 ordering进行比较。
5.45 NullsFirstOrdering<T>:继承 Ordering<Iterable<T>>类。认为 null比其他值小。
5.46 NullsLastOrdering<T>:继承 Ordering<Iterable<T>>类。认为 null比其他值大。
p { margin-bottom: 0.08in; }
5.47 Collections2:提供了与 Collection相关的一些静态方法。
静态方法:
filter(Collection<E> unfiltered, Predicate<? super E> predicate):返回 Collection<E>,它封装了 unfiltered和 predicate,向这个 collection添加元素时先用 predicate检查元素是否规范,符合规范才添加到 collection里。
transform(Collection<F> fromCollection,Function<? super F, T> function):返回 Collection<E>,它封装了 fromCollection 和 function,它的 iterator()方法返回的迭代器是转换后的迭代器,该迭代器的 next()返回值是 fromCollection的迭代器的 next()返回值经过 function计算的结果。
5.48 ComparisionChain:抽象类,有两个内部类,其中一个为匿名内部类。
静态方法:
start():返回 ComparisonChain的实例 ACTIVE。 ACTIVE是匿名内部类的实例,调用它的 compare(left, right)方法时,如果 left<right则返回 LESS,如果 left>right则返回 GREATER, 如果相等则返回 ACTIVE,它的 result()方法返回 0。 LESS的 compare()方法返回它本身, result()方法返回 -1。 GREATER的 compare()方法返回它本身, result()方法返回 1。
成员方法:
compare(...):抽象方法,返回 ComparisonChain。
result():抽象方法,返回 int型,一般为 -1、 0或 1。
5.49 GenericMapMaker<K0, V0>:抽象类,只定义了接口,没有实现,内部封装了一个 MapEvictionListener。
5.50 MapMaker: final类,继承了 GenericMapMaker<Object, Object>,是 ConcurrentMap的 builder。它的构造方法是公开的,可以直接通过 new获取一个实例。
成员方法:
initialCapacity(int initialCapacity):如果 this的初始容量已经设置过了,则抛出异常,否则将其设为参数中的 initialCapacity,并返回 this。
maximumSize(int size):如果 this的 maximumSize已经设置过了,则抛出异常,否则将其设为 size,并返回 this。
concurrencyLevel(int concurrencyLevel):如果 this的 concurrencyLevel 已经设置过了,则抛出异常,否则将其设为参数中的 concurrencyLevel,并返回 this。
weakKeys():如果 this的 keyStrength 已经设置过了,则抛出异常,否则将其设为 Strength.WEAK,将 useCustomMap设为 true,并返回 this。
softKeys():如果 this的 keyStrength 已经设置过了,则抛出异常,否则将其设为 Strength.SOFT,将 useCustomMap设为 true,并返回 this。
weakValues():如果 this的 valueStrength 已经设置过了,则抛出异常,否则将其设为 Strength.WEAK,将 useCustomMap设为 true,并返回 this。
softValues():如果 this的 valueStrength 已经设置过了,则抛出异常,否则将其设为 Strength.SOFT,将 useCustomMap设为 true,并返回 this。
expireAfterWrite(long duration, TimeUnit unit):如果 this的 expireAfterWriteNanos 已经设置过了,则抛出异常,否则将其设为 unit.toNanos(duration),将 useCustomMap设为 true,并返回 this。
expireAfterAccess(long duration, TimeUnit unit):如果 this的 expireAfterAccessNanos 已经设置过了,则抛出异常,否则将其设为 unit.toNanos(duration),将 useCustomMap设为 true,并返回 this。
evictionListener(MapEvictionListener<K, V> listener):如果 this的 evictionLisener已经设置过了,则抛出异常,否则将其设为 listener,将 useCustomMap设为 true,并返回 this。
makeMap():如果 useCustomMap为 false,返回一个 ConcurrentHashMap,否则判断 useNullMap,如果为 true,返回一个 NullConcurrentMap,否则返回一个 CustomConcurrentHashMap。 NullConcurrentMap是内部类,不包含任何键值对。
makeComputingMap(Funcion<? super K, ? extends V> computingFunction):返回一个 ConcurrentMap。根据 this,创建一个 NullComputingConcurrentMap或 ComputingConcurrentMap。 NullComputingConcurrentMap是继承 NullConcurrentMap实现 Cache接口 (Cache继承 Function接口,定义了一个方法: asMap():ConcurrentMap)的内部类,它的 apply(K key)方法返回 computingFunction计算 key的结果, asMap()方法返回 this。
(未完待续)
以上。