Java集合框架之Stack Queue Deque使用详解刨析
作者:谢谢你,泰罗! 时间:2022-06-11 06:10:19
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
来源:https://blog.csdn.net/weixin_51367845/article/details/120898298
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Android:“万能”Activity重构篇
![](https://img.aspxhome.com/file/2023/0/138400_0s.png)
android Watchdog 实现剖析
![](https://img.aspxhome.com/file/2023/3/98683_0s.jpg)
Android中Activity之间跳转和参数传递的实例
![](https://img.aspxhome.com/file/2023/3/98653_0s.jpg)
云计算实验:Java MapReduce编程
![](https://img.aspxhome.com/file/2023/3/116213_0s.png)
spring-cloud入门之eureka-client(服务注册)
![](https://img.aspxhome.com/file/2023/4/90974_0s.png)
Java中的CAS和ABA问题说明
![](https://img.aspxhome.com/file/2023/7/66637_0s.png)
springboot bootcdn使用示例详解
ListView实现下拉动态渲染数据
![](https://img.aspxhome.com/file/2023/8/137918_0s.gif)
Java中CyclicBarrier 循环屏障
![](https://img.aspxhome.com/file/2023/3/76223_0s.png)
Java调用wsdl接口的两种方法(axis和wsimport)
![](https://img.aspxhome.com/file/2023/8/65338_0s.png)
浅谈java中异常抛出后代码是否会继续执行
![](https://img.aspxhome.com/file/2023/7/119047_0s.jpg)
JVM中的flag设置详解
![](https://img.aspxhome.com/file/2023/7/108207_0s.jpg)
JAVA中Comparable接口和自定义比较器示例讲解
C# Double转化为String时的保留位数及格式方式
win10和win7下java开发环境配置教程
![](https://img.aspxhome.com/file/2023/6/79866_0s.png)
java文件操作练习代码 读取某个盘符下的文件
Spring Security Remember me使用及原理详解
![](https://img.aspxhome.com/file/2023/2/80912_0s.png)