介绍三个集合容器库(二)

2014-11-23 23:26:16 · 作者: · 浏览: 2
线程安全的外覆器(wrapper)来达到。这样的一种外覆器在集合框架中有一个只读的类似版本。
然而,这一框架比较小,不意味着对所有数据结构提供支持。相反,你仅仅可以通过它创建一些特殊的实现。

The Jakarta Commons Collections 组件
一些特定实现已被很好地定义与解释,可他们却不是核心集合框架(core Collections Framework)的一部分。其中的一些实现可能被包含在了同步公用类库里,随后我们将更为细致的讨论。
Jakarta Commons Collections 组件是这套特定实现的一个示例。被设计用来与J2SE 1.2 协作的Commons Collections 组件,它提供了两个List实现和八个Map实现。新的基本结构也是可用的而且非常有趣。
让我们来看一看这一组特制实现。
最易理解的是FastArrayList, FastHashMap, 和 FastTreeMap。它们分别继承了标准的ArrayList、HashMap、和TreeMap,且都提供了在多线程下安全的同步读写访问。然而,安全性是需要成本的,这样便降低了写操作的速度。当读操作是非同步时,写操作在现存结构被替代时是在一份数据备份上进行地。
Bag就象是Set,但可以重复。另外它还有两个实现:HashBag和TreeBag;后者是经排序地。
另一个新的接口是PriorityQueue。它支持可比较项和使用比较器(Comparator),所以这些项可以BinaryHeap(基于优先级的)来维护,而且随后可从该堆中删除。
剩下的就是一组特定的Map实现。它们提供了特殊目标(special-purpose)、键-值(key-value)来查找映射(maps)。
l BeanMap运用反射提供了键值对(基于JavaBean属性);该键是属性名,该值是这一属性名的值。
l ExtendedProperties继承了java.util.Properties;它为单一属性连接了多个值,而非覆写它。
l LRUMap是一个可维护最大容量的Map,而且使用了至少一个运算法则来定义在这一Map已满时要移去的节点。
l MultiHashMap有点象WeakHashMap,但它用的是SoftReference而非WeakReference。
l DoubleOrderedMap的重点在于串。它提供了一个Map来支持快速搜索(通过值和键)。但有这样一个要求:键和值必须都是唯一的。当然你用两个TreeMap对象也可以做到,但DoubleOrderedMap对每一个键值对仅保存一次。

其它更多的类和接口则更多的支持角色,但仍有一些特别的方法可用。除了象isSubCollection和合并等一些公用方法外,该框架还包括了附加的Comparators和Iterators。Comparators大部分是用来连锁或替换另一个Comparator的行为。比如说,java.util.Collections.reverseOrder()可以颠倒元素的原顺序,而ReverseComparator通过一个比较器(Comparator)来颠倒顺序。Iterators是在取出元素之前将每个Collection元素通过一个函数(或方法)的作用。这是JGL和STL共享的方法。

JGL 4.0
自1997年以来,JGL就没有任何的更新,所以它的新版本使我很惊讶。我以为JGL已没有了任何目的。显然,Recursion Software赋予了它其它的目的。该公司宣布其基本用户已超过25万人,可是我并没有听说有谁在使用它。这一新版本与先前3.1版主要有三个不同之初:
l 所有的类与接口都集成到了Collections Framework中,且同该框架一样,默认非同步访问。
l 包的名称由com.objectspace.jgl改成了com.recursionsw.jgl。
l Voyager-related已被废