jakarta,Jakarta commons——Collections

每一个对象都有其对应的utils类
■ 何时适用:几乎所有需要操作数据结构的重要Java开发项目都可以使用Collections API。和Java的标准实现相比,Collections API有着诸多优势。
■ 示例应用:CollectionsDemo.java。要求CLASSPATH中包含commons-collections.jar。
■ 说明:
集合类
Ordered maps and sets that retain the order elements are added in, including an LRU based map
Identity map 使用==来进行对象的比较
BidiMap interface for maps 可以通过value查找key,通过key查找value
Bag接口扩展标准的Java Collection,允许生成计数器来跟踪Bag里面的所有元素。当你想要跟踪进出某个集合的元素的总数时,Bag是非常有用的。由于Bag本身是一个接口,所以实际使用的应该是实现了该接口的类,例如HashBag或TreeBag--从这些类的名字也可以看出,HashBag实现的是一个HashMap的Bag,而TreeBag实现的是TreeMap的Bag。Bag接口中两个最重要的方法是:getCount(Object o),用来返回Bag里面特定对象的出现次数;uniqueSet(),返回所有唯一元素。
Buffer接口允许按照预定义的次序删除集合中的对象,删除次序可以是LIFO(Last In First Out,后进先出),或FIFO(First In First Out,先进先出),另外还可以是自定义的次序。下面来看看如何实现一个Buffer,按照自然次序删除元素。
BinaryHeap类实现了Buffer接口,能够按照自然次序删除元素。如果要颠倒次序,则必须传入一个false,告诉Heap采用自然次序的逆序。
BinaryHeap heap = new BinaryHeap();
// …
// 将元素加入该Heap
heap.add(new Integer(-1));
heap.add(new Integer(-10));
heap.add(new Integer(0));
heap.add(new Integer(-3));
heap.add(new Integer(5));
//…
// 删除一个元素
heap.remove();
调用该Heap的remove,按照自然次序,元素集合中的-10将被删除。如果我们要求按照逆序排序,则被删除的将是5。
FastArrayList、FastHashMap和FastTreeMap类能够按照两种模式操作,超越了与它们对应的标准Collection。第一种模式是"慢模式",类的修改操作(添加、删除元素)是同步的。与此相对,另一种模式是"快模式",对这些类的访问假定为只读操作,因此不需要同步,速度较快。在快模式中,结构性的改动通过下列方式完成:首先克隆现有的类,修改克隆得到的类,最后用克隆得到的类替换原有的类。FastArrayList、FastHashMap和FastTreeMap类特别适合于那种初始化之后大部分操作都是只读操作的多线程环境。
Util
CollectionUtil:
AddIgnoreNull transformer 集合 过滤 查找 等
MapUtil:
AddIgnoreNull transformer
SetUtil:
提供 predicated transformer type 同步和变为只读
ListUtils:
集合操作,计数,functor(predicated transformer Type),类型转换
Iterator
iterators包为各种集合和对象提供标准Java Collection包没有提供的迭代器。本文的示例应用示范了ArrayIterator,通过迭代方式访问Array的内容。iterators包里面各种迭代器的用法基本上与标准Java迭代器一样
MapIterator简化Map的迭代
IterableMap map = new HashedMap();
MapIterator it = map.mapIterator();
while (it.hasNext()) {
Object key = it.next();
Object value = it.getValue();
it.setValue(newValue);
}
Transformer
The supplied transformers are:
Invoker - returns the result of a method call _disibledevent=> (new NullComparator(false));
// …
// ② 将一些数据(包括几个null值)加入heap:
heap2.add(null);
heap2.add(new Integer("6"));
heap2.add(new Integer("-6"));
heap2.add(null);
// …
// ③ 最后删除一个元素,Bag包含的null将减少
// 一个,因为null要比其他对象小。
heap2.remove();
它在一个List遍历每一个对象,检查标准,如果适用该标准,对此对象进行某些操作。上述例子可以进行改进的关键地方在于从代码中将标准与动作解藕开来。首先,荣誉榜和问题学生的标准被两个Predicate对象模型化了,并且加之于荣誉学生和问题学生上的动作也被两个Closure对象模型化了。
所有的算子-- Closure, Predicate, 和 Transformer—能够被合并为合并算子来处理任何种类的逻辑问题。switch, while和for结构能够被SwitchClosure, WhileClosure, 和 ForClosure模型化。
复合的逻辑表达式可以被多个Predicate构建,通过使用OrPredicate, AndPredicate, AllPredicate, 和 NonePredicate将它们相互联接。Commons BeanUtils也包含了算子的实现被用来将算子应用到bean的属性中-- BeanPredicate, BeanComparator, 和 BeanPropertyValueChangeClosure。算子是考虑底层的应用架构的不一样的方法,它们可以很好地改造你编码实现的方法。
Jakarta Commons JXPath增加了一种有趣的手法:你可以用JXPath来从bean和集合中选择对象 (参考“临时”目录下)
Tags:  jakarta

延伸阅读

最新评论

发表评论