关于Java中的Deque


一、二者的关系

1、Quene以及Deque都是继承于Collection,Deque是Quene的子接口。
在这里插入图片描述

public interface Deque<E> extends Queue<E> 

Quene是先进先出的单向队列,Deque是双向队列。

2、下表列出了Deque与Queue相对应的接口:
在这里插入图片描述
3、下表列出了Deque与Stack对应的接口:

在这里插入图片描述

二、Quene接口

1、Quene是集合框架Collection的子接口,是一种常见的数据结构,Quene有一个直接子类PriorityQuene,队列Quene是一种常用的数据结构,可以将队列看作是一种特殊的线性表,该结构遵循的先进先出原则。Java中,LinkedList实现了Quene接口,因为LinkedList进行插入、删除操作效率较高。

poll():将队首的元素删除,并返回该元素。
peek():返回队首的元素,但不进行删除操作。
offer():将元素添加到队尾,如果成功,则返回true

2、Quene的具体代码操作

package com.edu.leetcode;

import java.util.*;


/**
 * @author
 * @version 1.0
 * @team 魔法城堡
 * @date 2021/9/11 10:14
 */
public class QueneDemo {
    public static void testQuene(){
        Queue<String> qu = new LinkedList<>();
        qu.add("苹果");
        qu.add("华为");

        System.out.println("原始队列:");
        System.out.println(qu);

        System.out.println("通过add往队尾添加元素:");
        qu.add("OPPO");
        System.out.println(qu);
        System.out.println("通过offer往队列尾添加元素:");
        qu.offer("vivo");
        System.out.println(qu);

        System.out.println("使用remove删除队列头元素:");
        qu.remove();
        System.out.println(qu);
        System.out.println("使用poll删除对列头元素:");
        qu.poll();
        System.out.println(qu);
    }
    public static void main(String[] args){
        QueneDemo.testQuene();
    }
}

执行结果如下:

// An highlighted block
原始队列:
[苹果, 华为]
通过add往队尾添加元素:
[苹果, 华为, OPPO]
通过offer往队列尾添加元素:
[苹果, 华为, OPPO, vivo]
使用remove删除队列头元素:
[华为, OPPO, vivo]
使用poll删除对列头元素:
[OPPO, vivo]

三、Deque接口(双向队列)

1、双端队列(Deque),是Quene是一个子接口,双向队列是指该队列两端的元素既能入队(offer)也能出队(poll),如果将Deque限制为只能从一端入队(push)和出队(pop),则可限制栈的数据结构。对于栈而言,有入栈,遵循先进后出原则。

它既可以当作栈使用,也可以当作队列使用

add()\offer(e):将元素增加到队列的末尾,如果成功,返回trueremove()\poll():将元素从队列的队首删除。
element()\peek():返回队首的元素,但不进行删除
栈:
push(e):入栈,添加到队首
pop(e):出栈,删除队首元素
peek():返回栈首元素,但不进行删除

代码示范:

package com.edu.leetcode;

import java.util.Deque;
import java.util.LinkedList;

/**
 * @author
 * @version 1.0
 * @team 魔法城堡
 * @date 2021/9/11 10:59
 */
public class DequeDemo {
    public static void dequeTest(){
        Deque<String> deque = new LinkedList<String >();
        deque.push("苹果");
        deque.push("华为");
        System.out.println("通过push(e)往队尾添加元素:");
        System.out.println(deque);

        //获取栈首元素后,元素不会出栈
        //peek()获取队首元素,不删除
        String str = deque.peek();
        System.out.println("获取队首元素peek()的返回值:"+str);
        System.out.println("通过peek()之后的:(只是获取,栈中还有这个元素):"+deque);

        //pop获取队首元素并删除
        String pos = deque.pop();
        System.out.println(pos);
        System.out.println("通过pop()之后的:(会把pop()的结果删掉):"+deque);

        //element获取队首元素,不删除
        String ele = deque.element();
        System.out.println("通过element()的返回值:"+ele);
        System.out.println("通过ele之后的栈:"+deque);

        //peek()获取队首元素,不删除
        String peekRes = deque.peek();
        System.out.println("通过pekk()的返回值:"+peekRes);
        System.out.println("通过peek()之后的栈:"+deque);
    }
    public static void main(String args[]){
        DequeDemo.dequeTest();
    }

}

参考链接:
[1] 参考链接.

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值