jdk中栈的实现
来源:互联网 发布:linux添加用户密码 编辑:程序博客网 时间:2024/06/06 03:01
栈只允许访问一个数据项:即最后插入的数据项。
只能对栈顶进行操作,后进先出(LIFO)。
push操作:
public E push(E item) { addElement(item); return item;}其中addElement(item)是父类vector的一个方法:public synchronized void addElement(E obj) { modCount++; ensureCapacityHelper(elementCount + 1); elementData[elementCount++] = obj;}其中modCount是定义在vector的父类AbstracList中的一个整数,在栈中,这个变量用来记录共有多少次进出栈操作。protected transient int modCount = 0;ensureCapacityHelper(int s)方法用来给数组容器扩容。protected int elementCount;是vector中的成员变量,用来记录当前共有多少可用值
pop操作,从栈中取出栈顶元素
public synchronized E pop() { E obj; int len = size(); obj = peek();//获取当前栈顶元素 removeElementAt(len - 1);//移除栈顶元素 return obj; }size()方法实现为public synchronized int size() { return elementCount;}peek()方法是获取当前最后一个元素public synchronized E peek() { int len = size(); if (len == 0) throw new EmptyStackException(); return elementAt(len - 1);}elementAt(int i)获取在位置i处的元素,该方法在vector中实现public synchronized E elementAt(int index) { if (index >= elementCount) { throw new ArrayIndexOutOfBoundsException(index + " >= " + elementCount); } return elementData(index); }E elementData(int index) { return (E) elementData[index];}removeElementAt(int index)用来移除数组中位置Index处的元素,在vector中实现。public synchronized void removeElementAt(int index) { modCount++; if (index >= elementCount) { throw new ArrayIndexOutOfBoundsException(index + " >= " + elementCount); } else if (index < 0) { throw new ArrayIndexOutOfBoundsException(index); } int j = elementCount - index - 1;//在栈操作中,j是永远等于0的。 if (j > 0) { System.arraycopy(elementData, index + 1, elementData, index, j);//把index处的元素移除,并把后面的元素前移一位。用C++实现。对于栈对象,这里不会执行 } elementCount--; elementData[elementCount] = null; /* 置为null,让gc及时回收*/ }
阅读全文
0 0
- jdk中栈的实现
- jdk中timer的实现
- JDK中Thread Local 的实现
- JDK中ArrayList的实现分析
- JDK中LinkedList的实现分析
- jdk中设计模式的实现
- JDK 1.5中实现面向对象形式的SQL语句
- 运用JDK中 ZipInputStream类实现压缩文件的解压缩功能
- 吐槽JDK中LinkedList的indexOf方法实现
- 解决java 查看JDK中底层源码的实现方法
- jdk 1.7中HashMap的HashIterator实现细节小记
- JDK代理的实现
- JDK源码学习--JDK中Integer类的BitCount方法实现过程
- jdk动态代理的实现
- 仿jdk的ArrayList实现
- jdk实现常见的加密算法
- 自己实现JDK的Proxy
- jdk的动态代理实现
- 决策树ID3
- Menu菜单(常用型)
- linux Oracle 定时自动备份
- 请别把加班说的那么“高大上”
- 为什么Floyd算法中k必须放在最外层
- jdk中栈的实现
- 基于SNMP的网络管理软件设计方案和实现
- CentOS7 Failed to start LSB: Bring up/down解决方法
- .net面试宝典
- [Android Studio] android 去掉按钮自带阴影效果
- 精简“入口”延缓“拥堵”Discuz!教你如何用最经济的方式抵御CC攻击
- 多态的好处与弊端
- java通过url(http)存取远端文件
- 常用的表单验证