`
zyfautonavi
  • 浏览: 14669 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

commons.collections.buffer

阅读更多
Buffer是定义在org.apache.commons.collections包下面的接口,用于表示按一定顺序除去成员对象的

collection如队列等。具体的实现类在org.apache.commons.collections.buffer包下可以找到。

buffer下的实现类分为两类:基本类和包装类,大量用到了decrocate模式

基本类:

BoundedFifoBuffer:先进先出,默认32个
PriorityBuffer:告诉它怎么判定它的成员的先后顺序,优先级最高的最先走,优先级按照comarable接

口或者comparator决定。
CircularFifoBuffer:故名思议,默认创建32个容量的buffer,如果满了,将最老的东西给覆盖了。
UnboundedFifoBuffer:  先进先出的大小可变的队列, can grow to any size,性能比arrayList快的



包装类:
SynchronizedBuffer:将一个实现buffer接口的实现类多线程化
BlockingBuffer:多线程环境下,当BlockingBuffer为空时,等待,直到get()一个为止
TypedBuffer:要求加入的对象是某一中类型
TransformedBuffer:将对象转换为某一种兑现刚加入到其中,转化见 Transformer
PredicatedBuffer:加入到其中的类型满足一种定义,否则抛出异常。定义见PredicateDecorator
UnmodifiableBuffer:,不可变的buffer,一旦经过修饰,则不可以增加删除
BoundedBuffer:适合多线程下工作,只是在BoundedFifoBuffer上面增加了一个行为,当buffer为空的

时候,增加一个bolck行为,当等待时间超过给定的时间将会抛出异常,否则等待boundedBuffer被其他

线程new()出来。

BufferUtils:buffer的一个工具类,用他可以很方便的应用上除集合,最好看看源码


BufferUtils提供很多静态/工具方法装饰现有的Buffer实例,如将其装饰成BlockingBuffer、执行类型

检查的TypedBuffer、或者不可改变的UnmodifiableBuffer等等。



最简单直接的Buffer实现类是UnboundedFifoBuffer,提供先进先出的大小可变的队列。而

BoundedFifoBuffer则是对其大小进行了限制,是固定大小的先进先出队列。BlockingBuffer要在多线程

的环境中才能体现出它的价值,尤其是当我们需要实现某种流水线时这个BlockingBuffer很有用:每个

流水线上的组件从上游的BlockingBuffer获取数据,处理后放到下一个BlockingBuffer中依次传递。

BlockingBuffer的核心特色通俗点说就是如果你向它要东西,而它暂时还没有的话,你可以一直等待直

至拿到为止。PriorityBuffer则提供比一般的先进先出Buffer更强的控制力:我们可以自定义

Comparator给它,告诉它怎么判定它的成员的先后顺序,优先级最高的最先走。


org.apache.commons.collections.Predicate 下有无数的实现类,我们一样可以实现evalue()方法,
实现类的目的是将对类型的校验独立出来。如下:
public boolean evaluate(Object object)
它以一个Object对象为参数,处理后返回一个boolean值,检验某个对象是否满足某个条件
有些类似C/C++中的函数指针
0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics