最新消息:欢迎各位技术大牛一起交流讨论,邮箱:gww0426@163.com

Collection集合中的Buffer

Java技术 郭伟伟 64110浏览 0评论
当我们需要一种缓冲区来暂存数据的时候,我们就考虑用Buffer,或Queue。

常见的几种Buffer有:

UnboundedFifoBuffer 没有尺寸限制的先进先出队列
BoundedFifoBuffer 有尺寸限制的先进先出队列
PriorityBuffer 具有优先权的队列,构造函数传Comparator对象决定优先权。如果没有Comparator参数,则将每个对象强制转换成Comparable类型,并用CompareTo()比较对象
BlockingBuffer 阻塞式缓冲区,系统需要等待输入,并在某个对象加入缓冲区后马上处理它。

来个例子,先进先出的限制大小的队列:

Buffer buffer = new BoundedFifoBuffer(2);    buffer.add("A");

buffer.add("B");

try {

buffer.add("C");

} catch (BufferOverflowException e) {

System.out.println(e.getMessage());

}

再来个例子,具有优先级的队列:

Comparator chineseComparator = new ChineseComparator();    ComparatorChain comparatorChain = new ComparatorChain();

comparatorChain.addComparator(new BeanComparator("company",

chineseComparator));

comparatorChain.addComparator(new BeanComparator("name",

chineseComparator));

comparatorChain.addComparator(new BeanComparator("sex",

chineseComparator));

Buffer buffer = new PriorityBuffer(comparatorChain);

User user1 = new User("马加爵", "男", "招商局");

User user2 = new User("李刚", "男", "公安局");

User user3 = new User("马加爵", "女", "招商局");

User user4 = new User("李英", "男", "公安局");

User user5 = new User("马加爵", "男", "公安局");

buffer.add(user1);

buffer.add(user2);

buffer.add(user3);

buffer.add(user4);

buffer.add(user5);

while (buffer.size() > 0) {

User user = (User) buffer.remove();

System.out.println(user.getName() + "|" + user.getSex() + "|"

+ user.getCompany());

}

结果如下:

李刚|男|公安局李英|男|公安局

马加爵|男|公安局

马加爵|男|招商局

马加爵|女|招商局

最后一个例子,阻塞式队列:

package com.guoweiwei.test.buffer;import org.apache.commons.collections.Buffer;

public class BufferListener implements Runnable {

private Buffer buffer;

public BufferListener(Buffer buffer){

this.buffer = buffer;

}

public void run(){

while(true){

String message = (String)buffer.remove();

System.out.println(message);

}

}

}

上面的是实现了Runnable的监听类,当buffer有输入的时候会打印出当前的buffer元素。

Buffer buffer = BlockingBuffer.decorate(new BoundedFifoBuffer());    BufferListener listener = new BufferListener(buffer);

Thread listenerThread = new Thread(listener);

listenerThread.start();

buffer.add("hello");

buffer.add("thanks");

上面buffer对象是由BlockingBuffer装饰的BoundedFifoBuffer对象。将在buffer.add()时阻塞调用listenerThread的run()方法。

运行结果如下:

hellothanks

转载请注明:郭伟伟@互联网 » Collection集合中的Buffer


发表我的评论
取消评论

使用新浪微博登陆

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址