Thinking in java -- 队列
来源:互联网 发布:linux批量解压zip 编辑:程序博客网 时间:2024/06/18 01:31
运行下面代码
package containers;//: containers/QueueBehavior.java// Compares the behavior of some of the queuesimport java.util.concurrent.*;import java.util.*;import net.mindview.util.*;public class QueueBehavior { private static int count = 10; static <T> void test(Queue<T> queue, Generator<T> gen) { for (int i = 0; i < count; i++) queue.offer(gen.next()); while (queue.peek() != null) System.out.print(queue.remove() + " "); System.out.println(); } static class Gen implements Generator<String> { String[] s = ("one two three four five six seven " + "eight nine ten") .split(" "); int i; public String next() { return s[i++]; } } public static void main(String[] args) { test(new LinkedList<String>(), new Gen()); test(new PriorityQueue<String>(), new Gen()); test(new ArrayBlockingQueue<String>(count), new Gen()); test(new ConcurrentLinkedQueue<String>(), new Gen()); test(new LinkedBlockingQueue<String>(), new Gen()); test(new PriorityBlockingQueue<String>(), new Gen()); }} /* * Output: one two three four five six seven eight nine ten eight five four * nine one seven six ten three two one two three four five six seven eight * nine ten one two three four five six seven eight nine ten one two three * four five six seven eight nine ten eight five four nine one seven six ten * three two */// :~
程序test方法,通过queue.offer生成队列,并再通过queue.remove()异常并输出头元素。
输出结果,
one two three four five six seven eight nine ten
eight five four nine one seven six ten three two
one two three four five six seven eight nine ten
one two three four five six seven eight nine ten
one two three four five six seven eight nine ten
eight five four nine one seven six ten three two
LinkedList:
List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。
PriorityQueue:
一个基于优先级堆的无界优先级队列。优先级队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取决于所使用的构造方法。优先级队列不允许使用 null 元素。依靠自然顺序的优先级队列还不允许插入不可比较的对象(这样做可能导致 ClassCastException)。
ArrayBlockingQueue
一个由数组支持的有界阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。队列的头部 是在队列中存在时间最长的元素。队列的尾部 是在队列中存在时间最短的元素。新元素插入到队列的尾部,队列获取操作则是从队列头部开始获得元素。
ConcurrentLinkedQueue
一个基于链接节点的无界线程安全队列。此队列按照 FIFO(先进先出)原则对元素进行排序。队列的头部 是队列中时间最长的元素。队列的尾部 是队列中时间最短的元素。新的元素插入到队列的尾部,队列获取操作从队列头部获得元素。当多个线程共享访问一个公共 collection 时,ConcurrentLinkedQueue 是一个恰当的选择。此队列不允许使用 null 元素。
LinkedBlockingQueue
一个基于已链接节点的、范围任意的 blocking queue。此队列按 FIFO(先进先出)排序元素。队列的头部 是在队列中时间最长的元素。队列的尾部 是在队列中时间最短的元素。新元素插入到队列的尾部,并且队列获取操作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可预知的性能要低。
PriorityBlockingQueue
一个无界阻塞队列,它使用与类 PriorityQueue 相同的顺序规则,并且提供了阻塞获取操作。虽然此队列逻辑上是无界的,但是资源被耗尽时试图执行 add 操作也将失败(导致 OutOfMemoryError)。此类不允许使用 null 元素。依赖自然顺序的优先级队列也不允许插入不可比较的对象(这样做会导致抛出 ClassCastException)。
更多内容,详见JDK1.6中文版。http://tool.oschina.net/apidocs/apidoc?api=jdk-zh
- Thinking in java -- 队列
- [Java]Thinking in Java
- Thinking in Java笔记
- 《Thinking in Java》读书笔记
- Thinking in java(1)
- Thinking in JAVA websites
- Thinking in java 笔记
- Thinking In Java (一)
- Thinking In Java (二)
- Thinking in Java 8
- Thinking in Java 12
- 学习 thinking in java
- Thinking in java-1
- Thinking in java-02
- Thinking in java-03
- Thinking in java-04
- Thinking in java-05
- Thinking in java-06
- 求2个人的身高差值最小
- Python基础02 基本数据类型
- MSDN Webcast 系列课程之《跟我一起从零开始学WCF系列课程》(资料整合下载-共21讲)
- ListView长按删除效果
- Android 464XLAT
- Thinking in java -- 队列
- R语言:数据挖掘相关包的介绍
- 黑马程序员------Java基础学习------面向对象(下)
- Python QQ空间模拟上传图片 代码
- 关于O(logN)的正确理解
- 修改UCenter 版本1.6用户名长度限制的方法
- MFC静态调用dll
- Android学习笔记2
- 3130 CYD刷题