Java集合框架之Stack Queue Deque使用详解刨析

 更新时间:2021年10月25日 10:45:50   作者:谢谢你,泰罗!  
早在 Java 2 中之前,Java 就提供了特设类。比如:Dictionary, Vector, Stack, 和 Properties 这些类用来存储和操作对象组。虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。由于这个原因,使用 Vector 类的方式和使用 Properties 类的方式有着很大不同

1. Stack

1.1 介绍

Stack 栈是 Vector 的一个子类,它实现了一个标准的后进先出的栈。它的底层是一个数组。

堆栈只定义了默认构造函数,用来创建一个空栈。堆栈除了包括由 Vector 定义的所有方法,也定义了自己的一些方法。

1.2 常见方法

方法 描述
E push(E item) 压栈
E pop() 出栈
E peek() 查看栈顶元素,不删除
boolean empty() 判断栈是否为空

注意: 下面的示例都是一份代码分开拿出来的,上下其实是有逻辑关系的

示例一: 用 Stack 构造一个元素为整形的栈

Stack<Integer> stack = new Stack<>();

示例二: 压栈

stack.push(1);
stack.push(2);
stack.push(3);
// 结果为:[1, 2, 3]

示例三: 查看栈顶元素不删除

System.out.println(stack.peek());
System.out.println(stack);
// 结果为:3 和 [1, 2, 3]

示例四: 出栈

System.out.println(stack.pop());
System.out.println(stack);
// 结果为:3 和 [1, 2]

示例五: 判断栈是否为空

System.out.println(stack.empty());
// 结果为:false

2. Queue

2.1 介绍

Queue 队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。

LinkedList 类实现了 Queue 接口,因此我们可以把 LinkedList 当成 Queue 来用。

2.2 常见方法

方法 描述
boolean offer(E e) 入队列(出现错误返回特殊值)
boolean add(E e) 入队列(出现错误抛异常)
E poll() 出队列(出现错误返回特殊值)
E remove() 出队列(出现错误抛异常)
E peek() 得到队首元素,不删除(出现错误返回特殊值)
E element() 得到队首元素,不删除(出现错误抛异常)
boolean isEmpty() 判断队列是否为空

注意: 接下来使用 LinkedList 演示队列的使用方法,只要把握先进先出的原则就行。下面的示例都是一份代码分开拿出来的,上下其实是有逻辑关系的

示例一: 使用 LinkedList 创建一个元素为整型的队列

LinkedList<Integer> linkedList = new LinkedList<>();

示例二: 入队列

linkedList.offer(1);
linkedList.offer(2);
linkedList.offer(3);

示例三: 出队列

System.out.println(linkedList.poll());
// 结果为:1

示例四: 得到队首元素,不删除

System.out.println(linkedList.peek());
// 结果为:2

示例五: 判断队列是否为空

System.out.println(linkedList.isEmpty());
// 结果为:false

3. Deque

3.1 介绍

双端队列是指允许两端都可以进行入队和出队操作的队列。元素可以从队头出队和入队,也可以从队尾出队和入队

LinkedList 类实现了 Deque 接口,因此我们可以把 LinkedList 当成 Deque 来用。

3.2 常见方法

方法 描述
boolean offerFirst(E e) 从队头入队
boolean offerLast(E e) 从队尾入队
E pollFirst() 从队头出队
E pollLast() 从队尾出队
E peekFirst() 得到队头元素,不删除
E peekLast() 得到队尾元素,不删除

注意: 接下来使用 LinkedList 演示队列的使用方法,只要把握先进先出的原则就行。下面的示例都是一份代码分开拿出来的,上下其实是有逻辑关系的

示例一: 使用 LinkedList 创建一个元素为整型的队列

LinkedList<Integer> linkedList = new LinkedList<>();

示例二: 从队头入队

linkedList.offerFirst(1);
linkedList.offerFirst(2);
linkedList.offerFirst(3);
// 队列为:[3, 2, 1]

示例三: 从队尾入队

linkedList.offerLast(7);
linkedList.offerLast(8);
linkedList.offerLast(9);
// 队列为:[3, 2, 1, 7, 8, 9]

示例四: 从队头出队

System.out.println(linkedList.pollFirst());
// 结果为:3

示例五: 从队尾出队

System.out.println(linkedList.pollLast());
// 结果为:9

示例六: 得到队头元素,不删除

System.out.println(linkedList.peekFirst());
// 结果为:2

示例七: 得到队头元素,不删除

System.out.println(linkedList.peekLast());
// 结果为:8

到此这篇关于Java集合框架之Stack Queue Deque使用详解刨析的文章就介绍到这了,更多相关Java 集合框架内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 工厂方法模式_动力节点Java学院整理

    工厂方法模式_动力节点Java学院整理

    这篇文章主要介绍了工厂方法模式_动力节点Java学院整理的相关资料,需要的朋友可以参考下
    2017-08-08
  • MyBatis的配置对象Configuration作用及说明

    MyBatis的配置对象Configuration作用及说明

    MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对象负责管理MappedStatement、创建核心组件、提供配置信息的访问接口以及作为插件机制的入口
    2025-03-03
  • Spring中的自动装配机制详解

    Spring中的自动装配机制详解

    这篇文章主要介绍了Spring中的自动装配机制详解,自动装配就是会通过Spring的上下文为你找出相应依赖项的类,通俗的说就是Spring会在上下文中自动查找,并自动给Bean装配与其相关的属性,需要的朋友可以参考下
    2023-08-08
  • 基于Java实现二维码的生成和解析

    基于Java实现二维码的生成和解析

    二维码其实就是一种编码技术,只是这种编码技术是用在图片上了,将给定的一些文字,数字转换为一张经过特定编码的图片。本文将利用Java实现二维码的生成和解析,需要的可以参考一下
    2022-08-08
  • Mybatis中流式查询的实现示例

    Mybatis中流式查询的实现示例

    MyBatis的ResultHandler是用于处理数据库查询结果集的工具,可以通过回调函数对数据进行流式处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-09-09
  • Spring boot测试找不到SpringRunner.class的问题

    Spring boot测试找不到SpringRunner.class的问题

    这篇文章主要介绍了Spring boot测试找不到SpringRunner.class的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Servlet的线程安全问题

    Servlet的线程安全问题

    本文主要介绍了Servlet的线程安全问题,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 深入理解以DEBUG方式线程的底层运行原理

    深入理解以DEBUG方式线程的底层运行原理

    说到线程的底层运行原理,想必各位也应该知道我们今天不可避免的要讲到JVM 了。其实大家明白了Java的运行时数据区域,也就明白了线程的底层原理,今天带着大家一步一步DEBUG,来看看线程到底是怎么运行的,顺便把IDEA的DEBUG方法简单讲一下
    2021-06-06
  • 快速定位Java 内存OOM的问题

    快速定位Java 内存OOM的问题

    这篇文章主要介绍了快速定位Java 内存OOM的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Spring基于注解管理bean实现方式讲解

    Spring基于注解管理bean实现方式讲解

    很多时候我们需要根据不同的条件在容器中加载不同的Bean,或者根据不同的条件来选择是否在容器中加载某个Bean,这就是Bean的加载控制,一般我们可以通过编程式或注解式两种不同的方式来完成Bean的管理
    2023-01-01

最新评论