Java集合 之 Queue集合

什么是Queue集合?
答:Queue用于模拟队列这种数据结构。队列通常是指“先进先出(FIFO)”的容器。队列的头部保存在队列中存放时间最长的元素,尾部保存存放时间最短的元素。新元素插入到队列的尾部,取出元素会返回队列头部的元素。通常,队列不允许随机访问队列中的元素。
Queue接口中定义了如下的几个方法:
void add(Object e): 将指定元素插入到队列的尾部。
object element(): 获取队列头部的元素,但是不删除该元素。
boolean offer(Object e): 将指定的元素插入此队列的尾部。当使用容量有限的队列时,此方法通常比add(Object e)有效。
Object peek(): 返回队列头部的元素,但是不删除该元素。如果队列为空,则返回null。
Object poll(): 返回队列头部的元素,并删除该元素。如果队列为空,则返回null。
Object remove(): 获取队列头部的元素,并删除该元素。
Queue接口有一个PriorityQueue实现类。除此之外,Queue还有一个Deque接口,Deque代表一个“双端队列”,双端队列可以同时从两端删除或添加元素,因此Deque可以当作栈来使用。java为Deque提供了ArrayDeque实现类和LinkedList实现类。
1.PriorityQueue实现类
PriorityQueue是一种比较标准的队列实现类,而不是绝对标准的。这是因为PriorityQueue保存队列元素的顺序不是按照元素添加的顺序来保存的,而是在添加元素的时候对元素的大小排序后再保存的。因此在PriorityQueue中使用peek()或pool()取出队列中头部的元素,取出的不是最先添加的元素,而是最小的元素。
public class PriorityQueueTest {
public static void main(String[] args){
PriorityQueue pq = new PriorityQueue();
pq.offer(6);
pq.add(-3);
pq.add(20);
pq.offer(18);
//输出:[-3, 6, 20, 18]
System.out.println(pq);
}
}
PriorityQueue不允许插入null元素,它还需要对队列元素进行排序,PriorityQueue有两种排序方式:
自然排序:采用自然排序的PriorityQueue集合中的元素必须实现Comparator接口,而且应该是一个类的多个实例,否则可能导致ClassCastException异常。
定制排序:创建PriorityQueue队列时,传入一个Comparable对象,该对象负责对所有队列中的所有元素进行排序。采用定制排序不要求必须实现Comparator接口。
2.Dueue接口与ArrayDeque实现类
Deque接口是Queue接口的子接口,它代表一个双端队列,Deque定义了一些方法:
void addFirst(Object e): 将指定元素添加到双端队列的头部。
void addLast(Object e): 将指定元素添加到双端队列的尾部。
Iteratord descendingItrator(): 返回该双端队列对应的迭代器,该迭代器以逆向顺序来迭代队列中的元素。
Object getFirst(): 获取但不删除双端队列的第一个元素。
Object getLast(): 获取但不删除双端队列的最后一个元素。
boolean offFirst(Object e): 将指定元素添加到双端队列的头部。
boolean offLast(OBject e): 将指定元素添加到双端队列的尾部。
Object peekFirst(): 获取但不删除双端队列的第一个元素;如果双端队列为空,则返回null。
Object PeekLast(): 获取但不删除双端队列的最后一个元素;如果双端队列为空,则返回null。
Object pollFirst(): 获取并删除双端队列的第一个元素;如果双端队列为空,则返回null。
Object pollLast(): 获取并删除双端队列的最后一个元素;如果双端队列为空,则返回null。
Object pop()(栈方法): pop出该双端队列所表示的栈的栈顶元素。相当于removeFirst()。
void push(Object e)(栈方法): 将一个元素push进该双端队列所表示的栈的栈顶。相当于addFirst()。
Object removeFirst(): 获取并删除该双端队列的第一个元素。
Object removeFirstOccurence(Object o): 删除该双端队列的第一次出现的元素o。
Object removeLast(): 获取并删除该双端队列的最后一个元素o。
Object removeLastOccurence(Object o): 删除该双端队列的最后一次出现的元素o。
public class ArrayDequeTest {
public static void main(String[] args){
ArrayDeque queue = new ArrayDeque();
queue.offer("春");
queue.offer("夏");
queue.offer("秋");
//输出:[春, 夏, 秋]
System.out.println(queue);
//输出:春
System.out.println(queue.peek());
//输出:[春, 夏, 秋]
System.out.println(queue);
//输出:春
System.out.println(queue.poll());
//输出:[夏, 秋]
System.out.println(queue);
}
}
//将双端队列当做栈
public class DequeStack {
public static void main(String[] args){
ArrayDeque stack = new ArrayDeque();
stack.push("春");
stack.push("夏");
stack.push("秋");
//输出:[秋, 夏, 春]
System.out.println(stack);
//输出:秋
System.out.println(stack.peek());
//输出:[秋, 夏, 春]
System.out.println(stack);
//输出:秋
System.out.println(stack.pop());
//输出:[夏, 春]
System.out.println(stack);
}
}
3.LinkedList实现类
LinkedList是List接口的实现类,因此它可以是一个集合,可以根据索引来随机访问集合中的元素。此外,它还是Duque接口的实现类,因此也可以作为一个双端队列,或者栈来使用。
LinkedList与ArrayList,ArrayDeque的实现机制完全不同,ArrayList和ArrayDeque内部以数组的形式来保存集合中的元素,因此随机访问集合元素时有较好的性能;而LinkedList以链表的形式来保存集合中的元素,因此随机访问集合元素时性能较差,但是插入和删除元素时性能比较出色(只需改变指针所指的地址即可),需要指出的是,虽然Vector也是以数组的形式来存储集合但因为它实现了线程同步(而且实现的机制不好),故各方面的性能都比较差。
Java集合 之 Queue集合的更多相关文章
- 【java提高】---queue集合
queue集合 什么是Queue集合? 答:Queue用于模拟队列这种数据结构.队列通常是指“先进先出(FIFO)”的容器.队列的头部保存在队列中存放时间最长的元素,尾部保存存放时间最短的元素. 新元 ...
- Stack集合、queue集合、hashtable集合
1.栈:Stack,先进后出,一个一个赋值,一个一个取值,按顺序. .count 取集合内元素的个数 .push() 将元素一个一个推入集合中//stack集合存入 ...
- (1)List集合 (2)Queue集合 (3)Set集合
1.List集合(重中之重)1.1 基本概念 java.util.List接口是Collection接口的子接口,该接口中元素有先后放入次序并允许重复 该接口的主要实现类:ArrayList类.Lin ...
- 集合、ArrayList 集合。Stack集合。Queue集合。以及Hashtable集合
arrayList 首先复制Colections加 : 创建arrayList ar =new arrayList(); //ArrayList al=new ArrayList(); ...
- Java——(六)Collection之Queue集合
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- Queue集合 Queue集合用于模拟队列这种数据结构,队列通常是指“先进先出‘(FIFO)的容 ...
- Java集合类学习笔记(Queue集合)
Queue集合用于模拟队列(先进先出:FIFO)这种数据类型. Queue有一个Deque接口,代表一个"双端队列",双端队列可以同时从两端来添加.删除元素,因此Deque的实现类 ...
- Java多线程系列--“JUC集合”07之 ArrayBlockingQueue
概要 本章对Java.util.concurrent包中的ArrayBlockingQueue类进行详细的介绍.内容包括:ArrayBlockingQueue介绍ArrayBlockingQueue原 ...
- Java多线程系列--“JUC集合”08之 LinkedBlockingQueue
概要 本章介绍JUC包中的LinkedBlockingQueue.内容包括:LinkedBlockingQueue介绍LinkedBlockingQueue原理和数据结构LinkedBlockingQ ...
- Java多线程系列--“JUC集合”09之 LinkedBlockingDeque
概要 本章介绍JUC包中的LinkedBlockingDeque.内容包括:LinkedBlockingDeque介绍LinkedBlockingDeque原理和数据结构LinkedBlockingD ...
随机推荐
- String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)
本章主要介绍String和CharSequence的区别,以及它们的API详细使用方法. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/string01. ...
- Clipping Magic – 帮助你轻松删除图片背景
Clipping Magic 让您轻松去除图片的背景,可以根据路径进行裁剪.操作很简单,只需拖动图像到放置区,或使用按钮选择文件.标记前景为绿,背景为红色,然后标记算法会帮助你处理好细节.处理后的图片 ...
- iOS- NSDateFormatter (自定义时间格式)
一. NSDateFormatter解释 1. 日期(NSDate)是NSString类的格式(stringWithFormat),也可以改变输出,如果需要输出年代信息等则需要进行转换,等等. 2. ...
- IOS开发UI基础UITextView相关属性
UITextView相关属性 • text: 设置textView中文本_textView.text = @"Now is the time for all good develope ...
- tomcat端口被占用
这里就以win7为例进行讲解. 首先打开cmd,打开的方法很简单,在开始菜单中直接输入即可.同样也可以按下win+R打开运行,然后输入cmd即可. 在dos命令中输入以下命令查询正在被使用的端口号以及 ...
- 网狐6603手机棋牌游戏源码.rar
网狐6603手机棋牌游戏源码.rar 文件大小: 333 MB 发布一款手机棋牌游戏源码带教程文档! 仅供学习,下载后请务必在24小时内删除! 网狐6603手机棋牌游戏源码 链接:http://p ...
- 实例对比剖析c#引用参数的用法
c#引用参数传递的深入剖析值类型的变量存储数据,而引用类型的变量存储对实际数据的引用.(这一点很重要,明白了之后就能区分开值类型和引用类型的差别) 在参数传递时,值类型是以值的形式传递的(传递的是值, ...
- (转) 关于在IE6下 无法跳转问题
之前在项目,用到超链接,在ie下没有问题,但是到了ie6,居然发现点击事件不起作用, 真不可思议,以前都没注意到,后来网上搜了下,问题就出在这个void(0)上!现把网上的资料整理了下. <a ...
- 重新想象 Windows 8 Store Apps (55) - 绑定: MVVM 模式
[源码下载] 重新想象 Windows 8 Store Apps (55) - 绑定: MVVM 模式 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 绑定 通过 M ...
- csharp: MVC Controls
http://mvccontrolstoolkit.codeplex.com/ MVC Controls Toolkit http://mvcjquerycontrols.codeplex.com/ ...