Stack源码解析
2022/1/7 17:33:34
本文主要是介绍Stack源码解析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.Stack源码解析
1.1概述
Stack是Vector的子类,也是一个线程安全的容器,从名字上可以看出,其是一个栈
结构。
//继承Vector public class Stack<E> extends Vector<E> {
1.2构造器
/* * Stack只有一个空参构造器, * 因为继承,默认会调用父类的空参构造器,所以 * 会调用Vector的空参构造器,由[Vector源码解析]可以 * 知道,Vector的空参构造器默认会初始化一个长度为10的数组。 */ public Stack() { }
1.3常用方法
1.3.1push()
public E push(E item) { /* * 此方法是其父类Vector的方法,是在数组尾部(第一个空位置)添加元素 * 详细讲解参考Vector源码解析 */ addElement(item); return item; }
1.3.2pop()
/* * 同步方法,将队尾元素删除(弹出栈顶元素)并返回 */ public synchronized E pop() { E obj; //获取元素个数 int len = size(); //获取尾部(栈顶)元素 obj = peek(); //删除栈顶元素 removeElementAt(len - 1); //返回栈顶元素 return obj; }
removeElementAt
public synchronized void removeElementAt(int index) { modCount++; //判断索引是否合法 if (index >= elementCount) { throw new ArrayIndexOutOfBoundsException(index + " >= " + elementCount); } else if (index < 0) { throw new ArrayIndexOutOfBoundsException(index); } //求出index位置的后面的元素个数(不包括index位置的元素) int j = elementCount - index - 1; //将index位置后面的元素往前移动一位 if (j > 0) { System.arraycopy(elementData, index + 1, elementData, index, j); } //元素个数减1 elementCount--; //最后一个元素置为NULL。 elementData[elementCount] = null; }
1.3.3peek()
/* * 同步方法,查看栈顶元素。 */ public synchronized E peek() { int len = size(); if (len == 0) throw new EmptyStackException(); //返回栈顶元素 return elementAt(len - 1); }
1.4总结
本质上还是一个集合,只是定义了在数组一端进行插入和删除的操作,所以可以作为栈使用。但是由于其核心方法都是加了锁了,所以效率比较低,一般使用LinkedList或者ArrayDeque代替Stack使用。
这篇关于Stack源码解析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-25安卓NDK 是什么?-icode9专业技术文章分享
- 2024-12-25caddy 可以定义日志到 文件吗?-icode9专业技术文章分享
- 2024-12-25wordfence如何设置密码规则?-icode9专业技术文章分享
- 2024-12-25有哪些方法可以实现 DLL 文件路径的管理?-icode9专业技术文章分享
- 2024-12-25错误信息 "At least one element in the source array could not be cast down to the destination array-icode9专业技术文章分享
- 2024-12-25'flutter' 不是内部或外部命令,也不是可运行的程序 或批处理文件。错误信息提示什么意思?-icode9专业技术文章分享
- 2024-12-25flutter项目 as提示Cannot resolve symbol 'embedding'提示什么意思?-icode9专业技术文章分享
- 2024-12-24怎么切换 Git 项目的远程仓库地址?-icode9专业技术文章分享
- 2024-12-24怎么更改 Git 远程仓库的名称?-icode9专业技术文章分享
- 2024-12-24更改 Git 本地分支关联的远程分支是什么命令?-icode9专业技术文章分享