官网首页Commons Collections ###概览
Java集合框架是JDK 1.2添加的主要功能。它增加了许多强大的数据结构,加速了许多的重大Java应用的开发。从那时起就成为了Java中处理集合的公认标准。
Commons-Collections试图通过提供新的接口,实现和工具来构建JDK类。有许多功能,其中包括:
- Bag 接口,每个对象都有多个副本的集合
- BidiMap 接口,能由 value 找到 key 也能由 key 找到 value的 Map
- MapIterator 接口,为 Map 提供简便快速的迭代器
- 转换装饰器,在对象添加到集合中时类型转换
- 复合集合 ,使多个集合看起来像一个集合
- 有序 Map 和 Set ,让元素保留加入集合时的顺序,包括一个基于 LRU 的Map
- ReferenceMap,允许 key 和/或 value 在密切控制下被垃圾回收
- 许多比较器
- 许多迭代器
- 数组和枚举转为集合的适配器
- 用于测试或创建集合典型属性(如联合,交集和闭包)的工具
包结构
Package | Description |
---|---|
org.apache.commons.collections4 | 包含子包中共享的接口和工具 |
org.apache.commons.collections4.bag | Bag 和 SortedBag 接口的实现 |
org.apache.commons.collections4.bidimap | BidiMap , OrderedBidiMap 和 SortedBidiMap 接口的实现 |
org.apache.commons.collections4.collection | Collection 接口的实现 |
org.apache.commons.collections4.comparators | Comparator 接口的实现 |
org.apache.commons.collections4.functors | Closure , Predicate , Transformer 和 Factory 接口的实现 |
org.apache.commons.collections4.iterators | Iterator 接口的实现 |
org.apache.commons.collections4.keyvalue | collection 和 键值映射类的实现 |
org.apache.commons.collections4.list | List 接口的实现 |
org.apache.commons.collections4.map | Map , IterableMap , OrderedMap 和 SortedMap 接口的实现 |
org.apache.commons.collections4.multimap | MultiValuedMap 接口的实现 |
org.apache.commons.collections4.multiset | MultiSet and SortedMultiSet 接口的实现 |
org.apache.commons.collections4.queue | Queue 接口的实现 |
org.apache.commons.collections4.sequence | 比较两对象序列 |
org.apache.commons.collections4.set | Set , SortedSet and NavigableSet 接口的实现 |
org.apache.commons.collections4.splitmap | “split map” 是指实现了Put 和Get 接口的对象, 拥有 不同 的通用类型 |
org.apache.commons.collections4.trie | Trie 接口的实现 |
org.apache.commons.collections4.trie.analyzer | 多种 KeyAnalyzer 接口的实现 |
一、Utilities
大多数方法在CollectionUtils
和MapUtils
都有,包括交集,计数,迭代,函子和类型转换等操作。因为大部分集合接口都继承于Collection
或Map
接口,所以这些方法对他们都适用。
而SetUtils
提供了 Set
和 SortedSet
接口的方法。
工具 | 描述 |
---|---|
BagUtils | Bag 和 SortedBag 实例的工具方法和装饰器 |
ClosureUtils | 闭包接口的工具与实现 |
CollectionUtils | Collection 实例的工具方法和装饰器 |
ComparatorUtils | Comparator 对象的便用静态方法 |
EnumerationUtils | Enumeration 实例的工具方法 |
FactoryUtils | Factory 函子接口的工具与实现 |
FluentIterable | 流畅 Iterable 工具 |
IterableUtils | Iterable 实例的工具方法和装饰器 |
IteratorUtils | Iterator 实例的工具方法和装饰器 |
ListUtils | List 实例的工具方法和装饰器 |
MapUtils | Map 和 SortedMap 实例的工具方法和装饰器 |
MultiMapUtils | MultiValuedMap 实例的工具方法和装饰器 |
MultiSetUtils | MultiSet 实例的工具方法和装饰器 |
PredicateUtils | Predicate 函子接口的工具与实现 |
QueueUtils | Queue 实例的工具方法和装饰器 |
SetUtils | Set 和 SortedSet 实例的工具方法和装饰器 |
SplitMapUtils | “split maps” 工具 |
TransformerUtils | Transforme 函子接口的工具与实现 |
TrieUtils | Trie 工具集 |
二、Maps
org.apache.commons.collections4.map
包含Map
,IterableMap
,OrderedMap
和SortedMap
接口的实现。
1、迭代map
IterableMap
接口
IterableMap iterableMap = (IterableMap) new HashMap();
MapIterator it = iterableMap.mapIterator();
while(it.hasNext()){
Object key = it.next();
Object value = it.getValue();
}
2、有序map
orderedmap
接口是有顺序的,但是并没有进行排序。linkedmap
和listorderedmap
(封装器)是这个接口的两种实现。这个接口支持map迭代,同时允许对map进行前向迭代和反向迭代。
OrderedMap map = new LinkedMap();
map.put("FIVE", "5");
map.put("SIX", "6");
map.put("SEVEN", "7");
map.firstKey(); // returns "FIVE"
map.nextKey("FIVE"); // returns "SIX"
map.nextKey("SIX"); // returns "SEVEN"
3、双向Map
3.1)BidiMap<K,V>接口
BidiMap
扩展了Map
,可以在键和值之间进行双向查找。
强行限制键和值之间为1:1关系,不同键无法映射到相同的值。
提供了反向视图,可以双向访问。
额外还有OrderedBidiMap
和 SortedBidiMap
接口
3.2)org.apache.commons.collections4.bidimap 包
包含BidiMap
, OrderedBidiMap
和 SortedBidiMap
接口的实现
包中提供了以下实现:
DualHashBidiMap - 使用两个HashMap来实现BidiMap
DualLinkedHashBidiMap - 使用两个LinkedHashMaps来实现BidiMap
DualTreeBidiMap - 使用两个TreeMaps来实现SortedBidiMap
TreeBidiMap - OrderedBidiMap的红黑树实现
包装中提供以下装饰器:
Unmodifiable - 确保map无法被更改
3.3)实例
BidiMap bidi = new TreeBidiMap();
bidi.put("SIX", "6");
bidi.get("SIX"); // returns "6"
bidi.getKey("6"); // returns "SIX"
bidi.removeValue("6"); // removes the mapping
BidiMap inverse = bidi.inverseBidiMap(); // returns a map with keys and values swapped
三、Bags
(1)Bag 接口
顶层包下。
定义了一个集合,用于统计对象在集合中出现的次数。
注意:此接口违反了Collection
规范。作为Collection
使用时要小心。
add/remove - 增/删
getCount(Object object) - 返回bag中当前给定对象的出现次数。
uniqueSet() - 返回bag中的一组独特元素。
假设你有一个包含{a,a,b,c}的包。 调用getCount(a)将返回2,而调用uniqueSet()将返回{a,b,c}。
(2)BagUtils
顶层包下。
Bag
和 SortedBag
实例的工具方法和装饰器。
各种bag转换方法。
(3)org.apache.commons.collections4.bag 包
Bag
和 SortedBag
接口的实现。bag存储对象和对象的出现次数。
包中提供了以下实现:
HashBag - 使用HashMap存储数据
TreeBag - 使用TreeMap来存储数据
包装中提供以下装饰器:
Synchronized - 多线程环境下的同步方法访问
Unmodifiable - 确保bag不能被改变
Predicated - 确保只能添加有效的元素
Transformed - 转换每个添加到包中的元素
Collection - 确保符合java.util.Collection规范
(4)例子
Bag bag = new HashBag();
bag.add("ONE", 6); // add 6 copies of "ONE"
bag.remove("ONE", 2); // removes 2 copies of "ONE"
bag.getCount("ONE"); // returns 4, the number of copies in the bag (6 - 2)
四、KeyValue
(1)KeyValue<K,V>接口
简单键值对。
Map在键值对之外有许多附加功能。 这个接口定义了最小键值对,只有两个get方法:getKey()、getValue()
(2)org.apache.commons.collections4.keyvalue 包
包含collection和map相关的键/值类实现。
MapEntry,KeyValue,MultiKey
MultiKey - 允许多键合并,主要目的是处理嵌套Map,
// populate map with data mapping key+locale to localizedText
Map map = new HashMap();
MultiKey multiKey = new MultiKey(key, locale);
map.put(multiKey, localizedText);
// later retrieve the localized text
MultiKey multiKey = new MultiKey(key, locale);
String localizedText = (String) map.get(multiKey);