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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值