4 Apache Commons Collections

Wu Jun 2019-12-25 15:59:04
16 辅助工具类 > 1 Apache Commons

官网首页Commons Collections ###概览

Java集合框架是JDK 1.2添加的主要功能。它增加了许多强大的数据结构,加速了许多的重大Java应用的开发。从那时起就成为了Java中处理集合的公认标准。

Commons-Collections试图通过提供新的接口,实现和工具来构建JDK类。有许多功能,其中包括:

包结构


Package Description
org.apache.commons.collections4 包含子包中共享的接口和工具
org.apache.commons.collections4.bag BagSortedBag 接口的实现
org.apache.commons.collections4.bidimap BidiMap, OrderedBidiMapSortedBidiMap 接口的实现
org.apache.commons.collections4.collection Collection 接口的实现
org.apache.commons.collections4.comparators Comparator 接口的实现
org.apache.commons.collections4.functors Closure, Predicate, TransformerFactory 接口的实现
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, OrderedMapSortedMap 接口的实现
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” 是指实现了PutGet接口的对象, 拥有 不同 的通用类型
org.apache.commons.collections4.trie Trie 接口的实现
org.apache.commons.collections4.trie.analyzer 多种 KeyAnalyzer 接口的实现

一、Utilities


大多数方法在CollectionUtilsMapUtils都有,包括交集,计数,迭代,函子和类型转换等操作。因为大部分集合接口都继承于CollectionMap接口,所以这些方法对他们都适用。 而SetUtils提供了 SetSortedSet 接口的方法。

工具 描述
BagUtils BagSortedBag 实例的工具方法和装饰器
ClosureUtils 闭包接口的工具与实现
CollectionUtils Collection 实例的工具方法和装饰器
ComparatorUtils Comparator 对象的便用静态方法
EnumerationUtils Enumeration 实例的工具方法
FactoryUtils Factory函子接口的工具与实现
FluentIterable 流畅 Iterable 工具
IterableUtils Iterable 实例的工具方法和装饰器
IteratorUtils Iterator 实例的工具方法和装饰器
ListUtils List 实例的工具方法和装饰器
MapUtils MapSortedMap 实例的工具方法和装饰器
MultiMapUtils MultiValuedMap 实例的工具方法和装饰器
MultiSetUtils MultiSet 实例的工具方法和装饰器
PredicateUtils Predicate 函子接口的工具与实现
QueueUtils Queue 实例的工具方法和装饰器
SetUtils SetSortedSet 实例的工具方法和装饰器
SplitMapUtils “split maps” 工具
TransformerUtils Transforme函子接口的工具与实现
TrieUtils Trie 工具集

二、Maps


org.apache.commons.collections4.map 包含MapIterableMapOrderedMapSortedMap接口的实现。

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接口是有顺序的,但是并没有进行排序。linkedmaplistorderedmap(封装器)是这个接口的两种实现。这个接口支持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关系,不同键无法映射到相同的值。
提供了反向视图,可以双向访问。
额外还有OrderedBidiMapSortedBidiMap 接口

3.2)org.apache.commons.collections4.bidimap 包

包含BidiMap, OrderedBidiMapSortedBidiMap 接口的实现 包中提供了以下实现:

 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

顶层包下。
BagSortedBag 实例的工具方法和装饰器。
各种bag转换方法。

(3)org.apache.commons.collections4.bag 包

BagSortedBag 接口的实现。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);