Java 集合深入理解(13):Stack 栈
来源:互联网 发布:it编程 编辑:程序博客网 时间:2024/06/05 06:57
数据结构中的 栈
数据结构中,栈是一种线性数据结构,遵从 LIFO(后进先出)的操作顺序,所有操作都是在顶部进行
有点像羽毛球筒:
栈通常有三种操作:
- push 入栈
- pop 栈顶元素出栈,并返回
- peek 获取栈顶元素,并不删除
我们自定义一个 栈 时只要实现上述三个主要操作即可,本文中将使用 Java 中的 LinkedList 实现一个栈。
栈的使用场景:
栈最主要的意义就在于:入栈和出栈的对称性。
在 Android 开发中,我们经常需要开启、回退一个 Activity,其实这里就有栈的应用,每次开启Activity,如果不是特殊的启动模式,就会在栈顶加入一个 Activity,点击返回后,之前的 Activity 出栈 。
其他场景比如递归(斐波那契数列,汉诺塔)。
Java 集合框架中的栈 Stack
Java 集合框架中的 Stack 继承自 Vector:
- 由于 Vector 有 4 个构造函数,加上 Stack 本身的一种,也就是说有 5 中创建 Stack 的方法
- 跟 Vector 一样,它是 数组实现的栈。
Stack 的方法
Stack 中新建的方法比较少:
1.构造函数
- 1
- 2
- 3
- 4
2.入栈
- 1
- 2
- 3
- 4
- 5
- 6
- 7
Vector 的 addElement() 方法,就是在数组尾部添加元素:
- 1
- 2
- 3
- 4
- 5
- 6
3.获取顶端元素,但不删除
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Vector.elementAt(int):
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
Vector.elementData(int):
- 1
- 2
- 3
- 4
4.出栈
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
Vector.removeElementAt(int):
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
5.查找元素是否在栈中
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
6.是否为空
- 1
- 2
- 3
- 4
Vector.size():
- 1
- 2
- 3
- 4
总结
Java 集合框架中的 Stack 具有以下特点:
- 继承自 Vector
- 有 5 种创建 Stack 的方法
- 采用数组实现
- 除了 push(),剩下的方法都是同步的
用链表实现一个栈?
由于 Stack 是用数组实现的,我们用链表实现一下吧,这里就选择 LinkedList 来实现:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
调用:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
结果:
可以看到,我其实都没做什么哈哈,都是 LinkedList 内部提供的方法,操作的都是在链表头部的元素,而不是尾部。
其实 LinkedList 这个栈的特性也是继承自 双端队列 Deque,官方也推荐在使用栈时优先使用 Deque,而不是 Stack,有兴趣的可以去了解下。
阅读全文
0 0
- Java 集合深入理解(13):Stack 栈
- Java 集合深入理解(13):Stack 栈
- Java 集合深入理解(13):Stack 栈
- 深入java集合:Stack
- 深入理解Stack 栈
- 深入理解Java集合
- Java集合(stack)
- Java 集合深入理解(3):Collection
- Java 集合深入理解(5):AbstractCollection
- Java 集合深入理解(6):AbstractList
- Java 集合深入理解(7):ArrayList
- Java 集合深入理解(8):AbstractSequentialList
- Java 集合深入理解(11):LinkedList
- Java 集合深入理解(15):AbstractMap
- Java 集合深入理解(3):Collection
- Java 集合深入理解(5):AbstractCollection
- Java 集合深入理解(6):AbstractList
- Java 集合深入理解(7):ArrayList
- pdf转换成CAD设置为dwg的格式
- 选取随机数
- ViewDragHelper 初入
- 0914 数据库设计DAO
- 使用pylon构建应用程序的常见设置(基本是环境设置)
- Java 集合深入理解(13):Stack 栈
- 线程的基本概念,基本状态、状态之间的关系
- xftp上传失败之解决办法
- Java设计模式之装饰者模式
- python学习三个月001
- 浅谈面向对象--《Thinking in Java》读书笔记(一)
- 多线程间通信的方法
- HDU 4035 Maze(概率DP)
- JAVA设计模式之单例模式