java队列Queue方法[通俗易懂]

java队列Queue方法[通俗易懂]Queue是一种很常见的数据结构类型,在java里面Queue是一个接口,它只是定义了一个基本的Queue应该有哪些功能规约。实际上有多个Queue的实现,有的是采用线性表实现,有的基于链表实现。还有的适用于多线程的环境。java中具有Queue功能的类主要有如下几个:AbstractQueue,ArrayBlockingQueue,ConcurrentLinkedQueue,LinkedB

大家好,又见面了,我是你们的朋友全栈君。

        Queue是一种很常见的数据结构类型,在java里面Queue是一个接口,它只是定义了一个基本的Queue应该有哪些功能规约。实际上有多个Queue的实现,有的是采用线性表实现,有的基于链表实现。还有的适用于多线程的环境。java中具有Queue功能的类主要有如下几个:AbstractQueue, ArrayBlockingQueue, ConcurrentLinkedQueue, LinkedBlockingQueue, DelayQueue, LinkedList, PriorityBlockingQueue, PriorityQueue和ArrayDqueue。

        Queue本身是一种先入先出的模型(FIFO),和我们日常生活中的排队模型很类似。根据不同的实现,他们主要有数组和链表两种实现形式。如下图:

java队列Queue方法[通俗易懂]

java队列Queue方法[通俗易懂]

        在jdk里几个常用队列实现之间的类关系图如下:

java队列Queue方法[通俗易懂]

        我们可以看到,Deque也是一个接口,它继承了Queue的接口规范。其中LinkedList和ArrayDeque都是实现Deque接口,所以,可以说他们俩都是双向队列。Queue作为一个接口,它声明的几个基本操作无非就是入队和出队的操作,具体定义如下:

public interface Queue<E> extends Collection<E> {

    boolean add(E e); // 添加元素到队列中,相当于进入队尾排队。如果已满,抛出异常

    boolean offer(E e);  //添加元素到队列中,相当于进入队尾排队.

    E remove(); //移除队头元素,如果为空,抛出异常

    E poll();  //移除队头元素,如果为空,返回null

    E element(); //获取但不移除队列头的元素,如果为空,抛出异常

    E peek();  //获取但不移除队列头的元素,如果为空,返回null
}

Deque

       按照我们一般的理解,Deque是一个双向队列,这将意味着它不过是对Queue接口的增强。如果仔细分析Deque接口代码的话,我们会发现它里面主要包含有4个部分的功能定义。

       1. 双向队列特定方法定义。 

       2. Queue方法定义。 

       3. Stack方法定义。

       4. Collection方法定义。
       其中第3,4部分的方法相当于告诉我们,具体实现Deque的类我们也可以把他们当成Stack和普通的Collection来使用。这也是接口定义规约带来的好处。这里我们就不再赘述。我们重点来对Queue相关的定义方法做一下概括:
       

       add相关的方法有如下几个:

boolean add(E e);

boolean offer(E e);

void addFirst(E e);

void addLast(E e);

boolean offerFirst(E e);

boolean offerLast(E e);

       这里定义了add, offer两个方法,从doc说明上来看,两者的基本上没什么区别。之所以定义了这两个方法是因为Deque继承了Collection, Queue两个接口,而这两个接口中都定义了增加元素的方法声明。他们本身的目的是一样的,只是在队列里头,添加元素肯定只是限于在队列的头或者尾添加。而offer作为一个更加适用于队列场景中的方法,也有存在的意义。他们的实现基本上一样,只是名字不同罢了。

       

        remove相关的方法:

E removeFirst();

E removeLast();

E pollFirst();

E pollLast();

E remove();

E poll();

        get元素相关的方法:

E getFirst();

E getLast();

E peekFirst();

E peekLast();

E element();

E peek();

例子

import java.util.Queue;
import java.util.LinkedList;
public class TestQueue {
    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<String>();
        queue.offer("Hello");
        queue.offer("World!");
        queue.offer("你好!");
        System.out.println(queue.size());
        String str;
        while((str=queue.poll())!=null){
            System.out.print(str);
        }
        System.out.println();
        System.out.println(queue.size());
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160353.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Pytest(15)pytest分布式执行用例[通俗易懂]

    Pytest(15)pytest分布式执行用例[通俗易懂]前言平常我们功能测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟,如果单个测试人员执行需要1000分钟才能跑完当项目非常紧急时,会需要协调多个测试资源来把任务分成两部分,于是执行时间

    2022年8月6日
    0
  • HTTP.sys远程执行代码漏洞验证及复现——CVE-2015-1635、MS15-034[通俗易懂]

    HTTP.sys远程执行代码漏洞验证及复现——CVE-2015-1635、MS15-034[通俗易懂]目录漏洞概述漏洞环境部署漏洞验证漏洞利用:ms15_034漏洞防御漏洞概述HTTP.sys简介HTTP.sys是MicrosoftWindows处理HTTP请求的内核驱动程序,为了优化IIS服务器性能,从IIS6.0引入,IIS服务进程依赖HTTP.sys。HTTP.sys远程代码执行漏洞实质是HTTP.sys的整数溢出漏洞漏洞成因远程执行代码漏洞存在于…

    2022年7月25日
    58
  • Percona Data Recovery Tool 单表恢复

    Percona Data Recovery Tool 单表恢复Percona Data Recovery Tool 单表恢复

    2022年4月20日
    37
  • mac电脑安装windows系统_windows怎么装mac系统

    mac电脑安装windows系统_windows怎么装mac系统Mac电脑安装Pycharm    Pycharm是python开发时的一款IDE(编辑器)。我们可以在Pycharm官网下载Mac最新版的Pycharm进行安装。http://www.jetbrains.com/pycharm/    激活成功教程Pycharm    下载完Pycharm后,我们需要对电脑中hosts文件进行修改。打开“访达”,按下shift+comm…

    2022年8月28日
    1
  • R语言-提取字符长度nchar函数与length函数「建议收藏」

    R语言-提取字符长度nchar函数与length函数「建议收藏」R语言中nchar函数:主要使用来返回字符长度而length函数:则是用来返回字符数量#Gettingthelengthofastringx=”John”y=c(“Jim”,”Tony”,”kavry”)nchar(x)#returnthenumberofcharactersinthestringnchar(y)#ifavector,return

    2022年5月29日
    38
  • Java基础知识面试题(2020最新版)

    文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别OracleJDK和OpenJDK的对比基础语法数据类型Java有哪些数据类型switc…

    2022年4月18日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号