Stack.capacity() 和 Stack.size() 之间的区别



我目前正在检查Stack<E>类,看看它是否已满。但是,List没有isFull()实现,所以我要求检查capacity()是否与size()相同。根据文档,size()返回此向量中的分量数,容量返回向量的当前容量。如果我理解正确,它们是一样的吗?如果是这样,我该如何检查我的Stack<E>是否已满?

Java 中的Stack数据结构表示一个后进先出 (LIFO) 对象堆栈。它通过五个操作扩展了类Vector,例如

  1. 流行
  2. 堆栈顶部的速览项
  3. 检查堆栈是否为空,并且
  4. 在堆栈中搜索项目

当堆栈类如下所示时

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

stack.size()- 给出当前大小,即推送到堆栈的元素总数

stack.capacity()- 给出当前容量,即数组大小,如 10 或 20 等......即,一旦您将 10 个元素推送到堆栈,您的堆栈容量就会翻倍。

内部Stack使用VectorVector是一个动态增长的阵列。 另外,对于Stack,您不能手动设置capacityIncrement因子,而是堆栈本身在内部管理,您可以在此处查看

size是堆栈中当前元素的数量。

capacity是一个内部细节,告诉您适合Vector的最大项目数。 但是,这并不真正相关,因为当达到容量时,它会自动扩展。

最新更新