驯服Tiger - 集合框架 - 编程入门网
。
队列(Queue)接口 5.0 集合框架较大的一个改变就是添加了新的基接口 Queue。虽然这个接口 是在“并发集合”技巧 (请参阅 参考资料)中描述的,但它的应用并不限于并 发。在计算机科学中,队列数据结构是基本的先进先出(FIFO) 结构。项目添 加到尾部,并且要从顶部删除。不仅能添加和删除元素,还能查看队列中有哪些 元素。清单 5 显示了 Queue 接口的 5 个方法: 清单 5. Queue 接口
驯服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 的用法,清单 7 中的程序添加了所有命令行元素 ,并按字母顺序处理它们。由于队列结构是 LinkedList,所以顺序应当是典型 的 FIFO 顺序,但是 PriorityQueue 将根据优先级对元素进行排序: 清单 7. PriorityQueue 的用法
清单 8 显示了用命令行 one two three four 运行程序之后的输出 : 清单 8. 清单 7 的结果
关于新的 Queue 接口,有件事需要提一下,这件事与 Collections 类有关 :方法 checkedQueue()、emptyQueue()、synchronizedQueue() 和 unmodifiableQueue() 全都是 Collections 类中所缺少的。根据 bug 报告,除 了 checkedQueue() 之外,所有类都是故意缺失的。对于 synchronizedQueue() ,并发集合是比纯粹的包装器更好的选择。其他方法则被认为不是必需的。也许 Tiger/6.0 版本中会添加 checkedQueue()(和 checkedBlockingQueue()) 。 本文配套源码 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |