【JDK1.8】Java 栈实现方式
2024-09-06 04:29:29
看到一道面试题,问Java中栈的实现方式,记录下一些实现细节。
API中有5个方法,分别是:
boolean empty()
E peek()
E pop()
E push()
int search(Object o)
Java中stack继承vector,底层实现方式是数组。
push:在数组末尾添加元素,添加之前保证数组容量足够。容量不够的话需要扩容,扩容策略如下:
int newCapacity = oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity);
public E push(E item) {
addElement(item); return item;
} public synchronized void addElement(E obj) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = obj;
}
pop:取出数组末尾元素,并删除
public synchronized E pop() {
E obj;
int len = size(); obj = peek();
removeElementAt(len - 1); return obj;
}
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;
if (j > 0) {
System.arraycopy(elementData, index + 1, elementData, index, j);
}
elementCount--;
elementData[elementCount] = null; /* to let gc do its work */
}
peek:取出数组末尾元素,不删除
public synchronized E peek() {
int len = size(); if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}
最新文章
- JS Date当前时间:获取日期时间方法在各浏览器中的差异
- jquery 百度搜索
- [Dynamics CRM 2016]如何配置多语言显示
- c中三大区的解析
- 【整理】--VC 编译整理
- Archiver 浅析
- c#智能感知(设置)及实现
- 栈的实现(JAVA)
- 三分钟PJ隐藏SSID无线网络
- SQL Server 查看正在运行的事务信息的 2 种方法。
- NTP原理及配置使用
- python 零基础学习之路 02-python入门
- 记录一次有意思的XSS过滤绕过
- Eclipse手动添加web.xml
- ASCII与HEX对照转换表
- spring multipart源码分析:
- 容器互联(linking)
- MT【289】含参绝对值的最大值之三
- [network] netfilter
- Ubuntu 18.04 上设置桌面程序开机自启动