Java中的Stack结构表示对象的后进先出(LIFO)堆栈。 它通过五个操作扩展了Vector类,例如
推
流行音乐
堆栈顶部的窥视项
检查堆栈为空并且
在堆栈中搜索项目
当Stack类如下
public class Stack extends Vector {
}
创建堆栈时,它不包含任何项目。 即将到来的堆栈容量和大小
Size -当前堆栈包含的元素数
Capacity -它能够容纳的元素数量
Push操作实现如下
public E push(E item) {
addElement(item);
return item;
}
addElement方法属于Vector类,它有助于在Vector插入新元素
public synchronized void addElement(E obj) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = obj;
}
ensureCapacityHelper允许检查其中的Vector是否能够添加新元素。 如果没有足够的空间容纳新元素,则Vector会增长
private void ensureCapacityHelper(int minCapacity) {
// overflow-conscious code
if (minCapacity - elementData.length > 0)
grow(minCapacity);
}
/**
* The maximum size of array to allocate.
* Some VMs reserve some header words in an array.
* Attempts to allocate larger arrays may result in
* OutOfMemoryError: Requested array size exceeds VM limit
*/
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
capacityIncrement : oldCapacity);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
elementData = Arrays.copyOf(elementData, newCapacity);
}
Arrays.copyOf是一个本地方法,它将使用newCapacity分配新的内存空间,并将数据从旧的内存位置复制到新的位置。