1. java Stack类
特性是:LIFO(后进先出)先进后出,最先进入的在栈底。
Stack底层也是通过数组实现的,同时也是线程安全的

Stack stack=new Stack();
//添加 (插入数据到栈顶)
stack.push(10L);
//判罚是否为空
stack.empty();
System.out.println(stack.empty());
//获取栈顶元素
Object peek = stack.peek();
System.out.println(peek);
//删除(出栈)
Object pop = stack.pop();
System.out.println(pop);
//获取元素的位置
int search = stack.search(10L);
System.out.println(search);//从1开始
System.out.println(stack);

2.Queue单向队列
特性是:FIFO(先进先出) ,最先进入的在队首。插入到队尾

//LinkedList实现了Queue接口 可以使用LinkedList
Queue queue=new LinkedList();
//Queue还有个直接子类PriorityQueue 自带扩容机制、无边界
Queue priorityQueu=new PriorityQueue();
//插入到队列末尾
priorityQueu.offer(10L);
priorityQueu.offer(40L);
System.out.println(priorityQueu);
//查看队首 不删除
Object peek = priorityQueu.peek();
System.out.println(peek);
//抛出 删除队首
Object poll = priorityQueu.poll();
System.out.println(poll);

3. Deque双向队列
ArrayDeque是无初始容量的双端队列,作为队列使用 ArrayDeque作为队列时的效率比LinkedList要高。
LinkedList则是双向链表。作为栈使用

//用作栈来使用
Deque stack=new LinkedList();
stack.addFirst(12);//添加元素
System.out.println(stack.peekFirst());//获取栈顶元素
System.out.println(stack.pollFirst());//获取并移除栈顶
//队列使用
Deque dequ=new ArrayDeque();
dequ.addLast(12); //添加元素队尾
System.out.println(dequ.peekFirst());//获取队首
System.out.println(dequ.pollFirst());//获取并移除队首
Queue	Deque
增加
add add、addFirst、addLast
offer offer、offerFirst、offerLast
移除
remove remove、removeFirst、removeLast
poll pop、poll、pollFirst、pollLast
获取
element element、getFirst、getLast
peek peek、peekFirst、peekLast
1、add和offer区别
add() : 添加元素,如果添加成功则返回true,如果队列是满的,则抛出异常
offer() : 添加元素,如果添加成功则返回true,如果队列是满的,则返回false
2、remove和poll
remove() : 移除队列头的元素并且返回,如果队列为空则抛出异常
poll() : 移除队列头的元素并且返回,如果队列为空则返回null
Deque新增了一个pop方法,也是移除队列头的元素并且返回,如果队列为空则抛出异常。
3、element和peek
element() :返回队列头元素但不移除,如果队列为空,则抛出异常
peek() :返回队列头元素但不移除,如果队列为空,则返回null
因此,增加推荐使用add,移除推荐使用poll,获取元素推荐使用peek。

区别:
Queue是单向队列,Deque 是double ended queue的缩写是双向队列。
Queue只能作为队列 , Deque可以作为栈也可以作为队列使用;
Queue以及Deque都是继承于Collection,Deque是Queue的子接口。

stack、Queue、Deque 作为Collection,可以使用集合的常用方法。

java Stack(栈)类、Queue和Deque队列的更多相关文章

  1. java集合类——Stack栈类与Queue队列

    Stack继承Vector类,它通过五个操作对类 Vector 进行了扩展. 栈是 后进先出的. 栈提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法.测试堆栈是否为空的 em ...

  2. Stack栈类与、Queue队列与线性表的区别和联系

    栈和队列都属于特殊的线性表   一.定义   1.线性表(linear list): 是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列.数据元素是一个抽象的符号,其具体含义在不同的情 ...

  3. 基于数组实现Java 自定义Stack栈类及应用

    栈是存放对象的一种特殊容器,在插入与删除对象时,这种结构遵循后进先出( Last-in-first-out,LIFO)的原则.java本身是有自带Stack类包,为了达到学习目的已经更好深入了解sta ...

  4. stack栈和Queue队列

    1.push将对象插入 System.Collections.Generic.Stack<T> 的顶部. Stack st = new Stack(); //栈是先进后出 st.Push( ...

  5. java - Stack栈和Heap堆的区别

    首先分清楚Stack,Heap的中文翻译:Stack—栈,Heap—堆.         在中文里,Stack可以翻译为“堆栈”,所以我直接查找了计算机术语里面堆和栈开头的词语:        堆存储 ...

  6. JAVA Stack栈和Heap堆的区别(转)

          首先分清楚Stack,Heap的中文翻译:Stack—栈,Heap—堆.         在中文里,Stack可以翻译为“堆栈”,所以我直接查找了计算机术语里面堆和栈开头的词语:      ...

  7. Java数据类型Stack栈、Queue队列、数组队列和循环队列的比较

    判断括号是否匹配:调用java本身 import java.util.Stack; public class Solution { public boolean isValid(String s){ ...

  8. java:stack栈: Stack 类表示后进先出(LIFO)的对象堆栈

    //Stack 类表示后进先出(LIFO)的对象堆栈 //它提供了通常的 push 和 pop 操作,以及取栈顶点的 peek 方法.测试堆栈是否为空的 empty 方法.在堆栈中查找项并确定到栈顶距 ...

  9. java Stack(栈)

    "Stack" 通常时指"后进后出"(LIFO)的容器,有时栈也被称为叠加栈,因为最后"压入"栈的元素,第一个"弹出"栈 ...

  10. java 数据类型:集合接口Collection之队列Queue:PriorityQueue ;Dequeue接口和ArrayDeque实现类:

    什么是Queue集合: Queue用于模拟队列这种数据结构,队列通常是"先进先出"(FIFO)的容器.队列的头部保存在队列中存放时间最长的元素,尾部保存存放时间最短的元素.    ...

随机推荐

  1. [cisco]Configure private VLAN

    vlan 100 private-vlan isolated ! vlan 200 private-vlan community ! vlan 300 private-vlan primary pri ...

  2. Spyglass CDC工具使用(三)

    最近一直在搞CDC (clock domain crossing) 方面的事情,现在就CDC的一些知识点进行总结. 做CDC检查使用的是Spyglass工具.以下内容转载自:Spyglass之CDC检 ...

  3. MSVC-用于其他IDE的手工环境配置,手工提取

    ​ 最近因为在使用Code::Blocks编程,遇到了MSVC编译的库,不愿意换VS,所以手工配置了MSVC路径.CB是有点老了,不像现在新的IDE都是自动搜索的,而且我又不会批处理orz. 这里面可 ...

  4. 实验五:开源控制器实践——POX

    基本要求 1.tcpdump 验证Hub模块 h1 ping h2的tcpdump抓包结果截图 h1 ping h3的tcpdump抓包结果截图 2.tcpdump 验证Switch模块 h1 pin ...

  5. PC端,知乎在不想登录的情况下一打开就弹出登录框的无痛解决办法

    基于chrome浏览器 第一步: chrome://settings/content/javascript 第二步:添加禁用项 [*.]zhihu.com

  6. mysql对汉字排序

    问题: 编写order by排序时,如果字段是汉字的话,排序会失效. 如: SELECT * FROM user ORDER BY age ASC,username DESC 此时按照username ...

  7. windows2012通过powershell安装远程组件技巧

    概要: 通过服务器管理器安装远程桌面服务会报错一直没有办法解决 之后了解到安装组件可以通过powershell命令安装   powershell命令说明 https://docs.microsoft. ...

  8. keras图片数字识别入门AI机器学习

    通过使用mnist(AI界的helloworld)手写数字模型训练集,了解下AI工作的基本流程. 本例子,要基于mnist数据集(该数据集包含了[0-9]的模型训练数据集和测试数据集)来完成一个手写数 ...

  9. IDEA: 如何导入项目模块 以及 将 Java程序打包 JAR 详细步骤

    IDEA: 如何导入项目模块 以及 将 Java程序打包 JAR 详细步骤 . @ 目录 IDEA: 如何导入项目模块 以及 将 Java程序打包 JAR 详细步骤 IDEA 导入项目模块 Modul ...

  10. 坚叔:让科幻片的概念变成产品丨编程挑战赛 x 嘉宾分享

    前言 本文基于资深创业者@坚叔在「RTE 2022 创新编程挑战赛」宣讲活动中分享内容二次整理. 嘉宾简介:陈坚(坚叔),国内二次元 AR/VR 资深创业者,国内第一批空间虚拟数字化从业人员,获得政府 ...