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中BufferedReader和BufferedWriter使用方式

    Java中BufferedReader和BufferedWriter使用方式

    这篇文章主要介绍了Java中BufferedReader和BufferedWriter使用方式,FileWriter 类从 OutputStreamWriter 类继承而来,BufferedReader 类从字符输入流中读取文本并缓冲字符,以便有效地读取字符,数组和行
    2022-06-06
  • java中如何判断JSONObject是否存在某个Key

    java中如何判断JSONObject是否存在某个Key

    这篇文章主要介绍了java中如何判断JSONObject是否存在某个Key,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Spring MVC集成springfox-swagger2构建restful API的方法详解

    Spring MVC集成springfox-swagger2构建restful API的方法详解

    这篇文章主要给大家介绍了关于Spring MVC集成springfox-swagger2构建restful API的相关资料,文中介绍介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-06-06
  • 使用springboot在工具类中读取配置文件(ClassPathResource)

    使用springboot在工具类中读取配置文件(ClassPathResource)

    这篇文章主要介绍了使用springboot在工具类中读取配置文件(ClassPathResource),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 确保SpringBoot定时任务只执行一次的常见方法小结

    确保SpringBoot定时任务只执行一次的常见方法小结

    在Spring Boot项目中,确保定时任务只执行一次是一个常见的需求,这种需求可以通过多种方式来实现,以下是一些常见的方法,它们各具特点,可以根据项目的实际需求来选择最合适的方法,需要的朋友可以参考下
    2024-10-10
  • 从0到1构建springboot web应用镜像并使用容器部署的过程

    从0到1构建springboot web应用镜像并使用容器部署的过程

    这篇文章主要介绍了从0到1构建springboot web应用镜像并使用容器部署,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • Java中高效的判断数组中某个元素是否存在详解

    Java中高效的判断数组中某个元素是否存在详解

    相信大家在操作Java的时候,经常会要检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作。同时,这个问题在Stack Overflow中也是一个非常热门的问题。本文将分析几种常见用法及其时间成本,有需要的朋友们可以参考借鉴。
    2016-11-11
  • 关于Java中Json的各种处理

    关于Java中Json的各种处理

    这篇文章主要介绍了关于Java中Json的各种处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Java布隆过滤器的原理和实现分析

    Java布隆过滤器的原理和实现分析

    数组、链表、树等数据结构会存储元素的内容,一旦数据量过大,消耗的内存也会呈现线性增长所以布隆过滤器是为了解决数据量大的一种数据结构。本文就来和大家详细说说布隆过滤器的原理和实现,感兴趣的可以了解一下
    2022-10-10
  • 详解Java中static关键字的使用和原理

    详解Java中static关键字的使用和原理

    static可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属于某个对象的。本文就来详细说说他的使用和原理,需要的可以参考一下
    2022-10-10

最新评论