Java——(六)Collection之Queue集合
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
Queue集合
Queue集合用于模拟队列这种数据结构,队列通常是指“先进先出‘(FIFO)的容器。队列
的头部保存在队列中存放时间最长的元素,队列的尾部保存咋队列中存放时间最短的元素。新元
素插入(offer)到队列的尾部,访问元素(poll)操作会返回队列头部的元素。通常队列不允许
随机访问队列中的元素。
Queue接口中定义了如下几个方法:
1)void add(Object o):将指定元素加入此队列的尾部。
2)Object element():获取队列头部的元素,但是不删除该元素。
3)boolean offer(Object o):将指定元素加入此队列的尾部。当时也有容量限制的队列时,
此方法通常比add(Object o)方法更好
4)Object peek():获取队列头部的元素,但不删除该元素,如果此队列为空,则返回null。
5)Object poll():获取队列头部的元素,删除该元素,如果此队列为空,则返回null。
6)Object remove():获取队列头部的元素,并删除该元素。
Queue接口有一个PriorityQueue实现类。此外,Queue还有一个Deque接口,它的实现类
即可当成队列使用,也可当成栈使用。Java为Deque提供了ArrayDeque和LinkedList两个实现类。
1.PriorityQueue实现类
PriorityQueue是一个比较标准的队列实现类。PriorityQueue保存队列元素的顺序并不是按加
入队列的顺序,而是按队列元素的大小进行重新排列。因此当调用peek()方法或者poll()方法取出队
列中的元素时,并不是取出最先进入队列的元素,而是取出队列中最小的元素。下面示范了
PriorityQueue队列的用法。
import java.util.PriorityQueue;
public class PriorityQueueTest {
public static void main(String[] args) {
PriorityQueue pq = new PriorityQueue();
pq.offer(6);
pq.offer(-3);
pq.offer(9);
pq.offer(0);
System.out.println(pq);
System.out.println(pq.poll());
System.out.println(pq.peek());
}
}
运行结果:
[-3, 0, 9, 6]
-3
0
2.Deque接口与ArrayDeque实现类
Deque接口是Queue接口的子接口,它代表一个双端队列,Deque接口里定义了一些双端队列
的方法:
1)void addFirst(Object o):将指定元素插入该双端队列的开头。
2)void addLast(Object o):将指定元素插入该双端队列的末尾。
3)Iterator descendingIterator():返回该双端队列对应的迭代器,该迭代器将以逆向顺序来迭代队列中的元素。
4)Object getFirst():获取但不删除双端队列的第一个元素。
5)Object getLast():获取但不删除双端队列的最后一个元素。
6)boolean offerFirst(Object o):将指定元素插入该双端队列的开头。
7)boolean offerLast(Object o):将指定元素插入该双端队列的末尾。
8)Object peekFirst():获取但不删除该双端队列的第一个元素;如果此双端队列为空,则返回null。
9)Object peekLast():获取但不删除该双端队列的最后一个元素;如果此双端队列为空,则返回null。
10)Object pollFirst():获取并删除该双端队列的第一个元素;如果此双端队列为空,则返回null。
11)Object pollLast():获取并删除该双端队列的最后一个元素;如果此双端队列为空,则返回null。
12)Object pop()(栈方法):pop出该双端队列所表示的栈顶元素。相当于removeFirst()。
13)void push(Object o)(栈方法):将一个元素push进该双端队列所表示的栈的栈顶。相当于addFirst(o)。
14)Object removeFirst():获取并删除该双端队列的第一个元素。
15)Object removeFirstOccurrence(Object o):删除该双端队列的第一次出现的元素o。
16)removeLast():删除该双端队列的最后一个元素。
17)removeFirstOccurrence(Object o):删除该双端队列的最后一次出现的元素o。
Deque接口提供了一个典型的实现类:ArrayDeque,它是一个基于数字实现的双端队列,创建Deque时
可以指定一个numElement参数,该参数用于指定Object[]数组的长度;如果不指定numElement参数,
Deque底层数组的长度为16.
提示:ArrayList和arrayDeque两个集合类的实现机制基本相似,它们的底层都采用一个动态的、可重分配的
Object[]数组来存储集合元素,当集合元素超出了该数组的容器时,系统会在底层重新分配一个Object[]数组
来存储集合元素。
2.LinkedList实现类
LinkedList类是List接口的实现类,此外,LinkedList还实现了Deque接口。下面程序示范了LinkedList集
合的用法。
import java.util.LinkedList;
public class LinkedListTest {
public static void main(String[] args) {
LinkedList llLinkedList = new LinkedList<>();
//将字符串元素加入队列尾部
llLinkedList.offer("黑马程序员");
//将字符串元素加入栈的栈顶
llLinkedList.push("传智播客");
//将字符串元素添加到队列的头部,相当于栈的顶部
llLinkedList.offerFirst("CSDN");
for (int i = 0; i < llLinkedList.size(); i++) {
System.out.println(llLinkedList.get(i));
}
//访问但不删除栈顶一个元素
System.out.println(llLinkedList.peekFirst());
//访问但不删除队列的最后一个元素
System.out.println(llLinkedList.peekLast());
//将栈顶的元素弹出“栈”
System.out.println(llLinkedList.pop());
//可以看到队列中的第一个元素被删除
System.out.println(llLinkedList);
//访问并删除队列的最后一个元素
System.out.println(llLinkedList.pollLast());
System.out.println(llLinkedList);
}
}
运行结果:
CSDN
传智播客
黑马程序员
CSDN
黑马程序员
CSDN
[传智播客, 黑马程序员]
黑马程序员
[传智播客]
LinkedList与ArrayList、ArrayDeque的实现机制完全不同,ArrayList、ArrayDeque内部
以数组的形式来保存集合中的元素,因此随机访问集合元素时有较好的性能;而LinkedList内部以
链表的形式来保存集合中的元素,因此随机访问集合元素时性能较差,但在插入、删除元素时性能
非常出色(只需改变指针所指的地址即可)。需要指出的是,虽然Vector也是以数组的形式来存储
集合元素的,但因为他实现了线程同步功能,所以各方面性能都有所下降。
Java——(六)Collection之Queue集合的更多相关文章
- JAVA基础知识之Queue集合
Queue接口 PriorityQueue类 Deque与ArrayDeque LinkedList 各种线性表性能分析 Queue接口 Queue用来模拟队列这种数据结构,遵循先进先出原则(FIFO ...
- Java中Collection和Collections的区别(引用自:http://www.cnblogs.com/dashi/p/3597937.html)
1.java.util.Collection 是一个集合接口(集合类的一个顶级接口).它提供了对集合对象进行基本操作的通用接口方法.Collection接口在Java 类库中有很多具体的实现.Co ...
- java类库 collection与collections (转)
http://www.cnblogs.com/dashi/p/3597937.html Java中Collection和Collections的区别 1.java.util.Collection 是一 ...
- Java中Collection和Collections的区别(转载)
转载来源:http://www.cnblogs.com/dashi/p/3597937.html 1.java.util.Collection 是一个集合接口(集合类的一个顶级接口).它提供了对集合对 ...
- Java中的集合(三)继承Collection的Queue接口
Java中的集合(三)继承Collection的Queue接口 一.Queue介绍 Queue接口继承自Collection接口,是Java中定义的一种队列数据结构,元素是有序的(按插入顺序排序),先 ...
- 《码出高效 Java开发手册》第六章 数据结构与集合
码云: https://gitee.com/forxiaoming/JavaBaseCode/blob/master/EasyCoding/src/collection/index.md 6.1 数据 ...
- java基础28 单例集合Collection下的List和Set集合
单例集合体系: ---------| collection 单例集合的根接口--------------| List 如果实现了list接口的集合类,具备的特点:有序,可重复 注:集合 ...
- 复习java基础第三天(集合:Collection、Set、HashSet、LinkedHashSet、TreeSet)
一.Collection常用的方法: Java 集合可分为 Set.List 和 Map 三种体系: Set:无序.不可重复的集合. List:有序,可重复的集合. Map:具有映射关系的集合. Co ...
- Java Collection、Map集合总结
1.Java中的Collection集合总结 Collection |---List(存储有序,可重复) |---ArrayList 底层数据结构是数组,查询快,增删慢. 线程不安全.效率高 |--- ...
随机推荐
- [HDOJ - 5208] Where is Bob 【DFS+按位贪心】
题目链接:HDOJ - 5208 题目分析 使用按位贪心的思想,即从高位向低位枚举,尽量使这一位的答案为 1 . 我们使用 DFS ,每次就是对于 [l1, r1] [l2, r2] x 进行处理 ...
- 详解 Android 的 Activity 组件
Activity 的生命周期 和 J2ME 的 MIDlet 一样,在 android 中,Activity 的生命周期交给系统统一管理.与 MIDlet 不同的是安装在 android 中的所有的 ...
- iOS便捷开发工具分享
项目/代码优化工具 1.objec_dep,可以了解项目中各个类的关联信息,了解项目中无效文件,知道双向应用的文件. 下载地址: https://github.com/nst/objc_dep 2.b ...
- 微软HoloLens技术解谜
HoloLens 是什么? HoloLens 是微软发布的可穿戴式增强现实计算设备,它拥有这么几个关键要素: 它是增强现实产品,即 Augmented Reality(AR),AR 技术将计算机生成的 ...
- mysql左联右联内联
在MySQL中由于性能的关系,常常要将子查询(Sub-Queries)用连接(join)来却而代之,能够更好地使用表中索引提高查询效率. 下面介绍各种join的使用,先上图: 我们MySQL常用的为左 ...
- VLD(Visual LeakDetector)内存泄露库的使用
VLD简介 由于C/C++语言没有所谓的垃圾收集器,内存的分配和释放都需要程序员自己来控制,这会给C/C++程序员带来一定的困难.当您的程序越来越复杂时,它的内存管理也会变得越来越困难.内存泄漏.内存 ...
- PHP+MYSQL实现输出打印数据库表结构和输出表内容
效果图1 <form id="form1" name="form1" action="2.php" method="get& ...
- Spring MVC 解读——View,ViewResolver(转)
上一篇文章(1)(2)分析了Spring是如何调用和执行控制器方法,以及处理返回结果的,现在我们就分析下Spring如何解析返回的结果生成响应的视图. 一.概念理解 View ---View接口表示一 ...
- 10.在Global全局文件中的Application_BeginRequest示例
只要有人访问本网站,都要执行全局文件的Application_BeginRequest事件.因此我们可以防盗链. 示例要求:凡不是网站本机登录的都给客户端提示,用图片显示. 分析:由于网页在加载时不是 ...
- poj3709
首先我们发现将一段数变为同一个数比间隔着搞肯定优,因为数列是升序的,然后不难得到方程式f[i]=min(f[j]+sum[i]-sum[j]-(i-j)*a[j+1]) (i-j>=m)简单的斜 ...