快速业务通道

驯服Tiger - 集合框架 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-07-04

队列(Queue)接口

5.0 集合框架较大的一个改变就是添加了新的基接口 Queue。虽然这个接口 是在“并发集合”技巧 (请参阅 参考资料)中描述的,但它的应用并不限于并 发。在计算机科学中,队列数据结构是基本的先进先出(FIFO) 结构。项目添 加到尾部,并且要从顶部删除。不仅能添加和删除元素,还能查看队列中有哪些 元素。清单 5 显示了 Queue 接口的 5 个方法:

清单 5. Queue 接口

public boolean offer(Object element)   public Object remove()   public Object poll()   public Object element()   public Object peek()

驯服Tiger - 集合框架(4)

时间:2010-12-16 John Zukowski

请记住,Queue 是从 Collection 接口扩展的,所以实现 Queue 接口也就实 现了 Collection。在使用 Queue 的实现时,应当将自己限制在接口的方法上。 例如,向 Queue 添加元素可以用 Collection 的 add() 方法来实现,它在失败 时会抛出未检测异常。相反,如果大小有限的队列满了,那么 offer() 方法会 返回 false,而不需要处理队列满的异常。

java.util.concurrent 包中具有 Queue 接口的多个实现,但并不包含所有 实现。LinkedList 类针对 JDK 5.0 的 Queue 接口作了修正,而 PriorityQueue 是随 JDK 5.0 添加进来的。余下的实现 —— ArrayBlockingQueue、ConcurrentLinkedQueue、DelayQueue、 LinkedBlockingQueue、PriorityBlockingQueue 和 SynchronousQueue —— 都 是 java.util.concurrent 包的组成部分。

因为 LinkedList 不是新事物,所以我们来看一下新的 PriorityQueue 类。 如清单 6 所示,可以用 6 种方法创建它。在不能使用 Comparator 时,可以使 用元素的自然顺序来确定优先级。如果元素没有实现 Comparable 接口,那么就 会产生运行时错误:

清单 6. PriorityQueue 构造函数

PriorityQueue()   PriorityQueue(Collection<? extends E> c)   PriorityQueue(int initialCapacity)   PriorityQueue(int initialCapacity, Comparator<? super E> comparator)   PriorityQueue(PriorityQueue<? extends E> c)   PriorityQueue(SortedSet<? extends E> c)

为了演示 PriorityQueue 的用法,清单 7 中的程序添加了所有命令行元素 ,并按字母顺序处理它们。由于队列结构是 LinkedList,所以顺序应当是典型 的 FIFO 顺序,但是 PriorityQueue 将根据优先级对元素进行排序:

清单 7. PriorityQueue 的用法

import java.util.*; import java.util.concurrent.*; public class Priority {   public static void main(String args[]) {    Queue<String> queue =     new PriorityQueue<String>(Arrays.asList(args));    String element;    while ((element = queue.poll()) != null) {      System.out.println(element);    }   } }

清单 8 显示了用命令行 one two three four 运行程序之后的输出 :

清单 8. 清单 7 的结果

>java Priority one two three four   four   one   three   two

关于新的 Queue 接口,有件事需要提一下,这件事与 Collections 类有关 :方法 checkedQueue()、emptyQueue()、synchronizedQueue() 和 unmodifiableQueue() 全都是 Collections 类中所缺少的。根据 bug 报告,除 了 checkedQueue() 之外,所有类都是故意缺失的。对于 synchronizedQueue() ,并发集合是比纯粹的包装器更好的选择。其他方法则被认为不是必需的。也许 Tiger/6.0 版本中会添加 checkedQueue()(和 checkedBlockingQueue()) 。

本文配套源码

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号