------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集合的更多相关文章

  1. JAVA基础知识之Queue集合

    Queue接口 PriorityQueue类 Deque与ArrayDeque LinkedList 各种线性表性能分析 Queue接口 Queue用来模拟队列这种数据结构,遵循先进先出原则(FIFO ...

  2. Java中Collection和Collections的区别(引用自:http://www.cnblogs.com/dashi/p/3597937.html)

      1.java.util.Collection 是一个集合接口(集合类的一个顶级接口).它提供了对集合对象进行基本操作的通用接口方法.Collection接口在Java 类库中有很多具体的实现.Co ...

  3. java类库 collection与collections (转)

    http://www.cnblogs.com/dashi/p/3597937.html Java中Collection和Collections的区别 1.java.util.Collection 是一 ...

  4. Java中Collection和Collections的区别(转载)

    转载来源:http://www.cnblogs.com/dashi/p/3597937.html 1.java.util.Collection 是一个集合接口(集合类的一个顶级接口).它提供了对集合对 ...

  5. Java中的集合(三)继承Collection的Queue接口

    Java中的集合(三)继承Collection的Queue接口 一.Queue介绍 Queue接口继承自Collection接口,是Java中定义的一种队列数据结构,元素是有序的(按插入顺序排序),先 ...

  6. 《码出高效 Java开发手册》第六章 数据结构与集合

    码云: https://gitee.com/forxiaoming/JavaBaseCode/blob/master/EasyCoding/src/collection/index.md 6.1 数据 ...

  7. java基础28 单例集合Collection下的List和Set集合

    单例集合体系: ---------| collection  单例集合的根接口--------------| List  如果实现了list接口的集合类,具备的特点:有序,可重复       注:集合 ...

  8. 复习java基础第三天(集合:Collection、Set、HashSet、LinkedHashSet、TreeSet)

    一.Collection常用的方法: Java 集合可分为 Set.List 和 Map 三种体系: Set:无序.不可重复的集合. List:有序,可重复的集合. Map:具有映射关系的集合. Co ...

  9. Java Collection、Map集合总结

    1.Java中的Collection集合总结 Collection |---List(存储有序,可重复) |---ArrayList 底层数据结构是数组,查询快,增删慢. 线程不安全.效率高 |--- ...

随机推荐

  1. Python处理XML

    在Python(以及其他编程语言)内有两种常见的方法处理XML:SAX(Simple API for XML)和DOM(Document Object Model,文档对象模型).SAX语法分析器读取 ...

  2. C++11的新特性lambda的小试牛刀RAII

    C/C++的资源是手动管理的 这导致程序员在申请资源时,最后用完了偶尔会忘记回收 C++语言的发明者倡导RAII,资源获取即初始化 使用对象来管理资源的生命周期,在超出作用域时,析构函数自动释放资源 ...

  3. Hust 1231 Coin

    题目链接 题意: 亮亮有N个有瑕疵的硬币,有瑕疵意味着抛一枚硬币正面向上的概率 不等于 反面向上的概率 也即概率不等于0.5. 现在亮亮一次抛N个硬币 , 恰好有K个硬币正面向上 ,接着他又想抛一次 ...

  4. Android 开发环境搭建9传送帖)

    ---恢复内容开始--- 首先,得安装软件,感觉我所找到的一些课本上写的都比较简略,走过一些弯路后,决定按照这个百度经验来 Android安卓开发环境搭建详细教程 http://jingyan.bai ...

  5. MySQL重置密码与远程连接权限问题

    如果mysql没有密码,或者密码设置为空的时候可以通过在用管理员身份打开cmd,然后在里面输入mysqladmin -u root password 123456  这个地方的密码是明文密码. 如果忘 ...

  6. Linux Shell编程(10)——引用变量

    当要引用一个变量的值时,一般推荐使用双引号.使用双引号除了变量名前缀($).后引符(`)和转义符(\)外,会使shell不再解释引号中其它所有的特殊字符.用双引号时$仍被当成特殊字符,允许引用一个被双 ...

  7. 许令波老师的java的IO机制分析文章

    深入分析 Java I/O 的工作机制 I/O 问题可以说是当今互联网 Web 应用中所面临的主要问题之一,因为当前在这个海量数据时代,数据在网络中随处流动.这个流动的过程中都涉及到 I/O 问题,可 ...

  8. Python异常处理实例

    #coding=utf-8 #---异常处理--- # 写一个自己定义的异常类 class MyInputException(Exception): def __init__(self, length ...

  9. Performance testing of web application

    Testing the performance of web application is easy . It's easy to design unrealistic scenario . Easy ...

  10. 几款常用Eclipse java插件

    以下是我最近常用的几款Eclipse java插件: ADT Plugin https://dl-ssl.google.com/android/eclipse/ WindowBuilder Pro  ...