java堆栈大小_java - Stack.capacity()和Stack.size()之间的区别 - 堆栈内存溢出

钱言
2023-12-01

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分配新的内存空间,并将数据从旧的内存位置复制到新的位置。

 类似资料: