Java Stack.capacity()和Stack.size()之间的差异
我目前正在使用Java Stack.capacity()和Stack.size()之间的差异,java,stack,Java,Stack,我目前正在使用堆栈类检查堆栈是否已满。但是,列表没有isFull()实现,因此我要求检查capacity()是否与size()相同。根据文档,size()。如果我理解正确,它们是一样的吗?如果是这样,我如何检查我的堆栈是否已满?Stack.size()-给出当前大小,即推送到堆栈的元素总数 stack.capacity()-给出当前容量,即数组大小,如10或20等。。。i、 例如,只要将10个元素推入堆栈,堆栈容量就会翻倍 内部Stack使用Vector并且Vector是一个动态增长的数组。 此
堆栈
类检查堆栈是否已满。但是,列表没有isFull()
实现,因此我要求检查capacity()
是否与size()
相同。根据文档,size()。如果我理解正确,它们是一样的吗?如果是这样,我如何检查我的堆栈是否已满?Stack.size()
-给出当前大小,即推送到堆栈的元素总数
stack.capacity()
-给出当前容量,即数组大小,如10或20等。。。i、 例如,只要将10个元素推入堆栈,堆栈容量就会翻倍
内部Stack
使用Vector
并且Vector
是一个动态增长的数组。
此外,对于堆栈
,您不能手动设置电容增量
系数,而是堆栈本身在内部管理,您可以查看堆栈。size()
-给出当前大小,即推送到堆栈的元素总数
stack.capacity()
-给出当前容量,即数组大小,如10或20等。。。i、 例如,只要将10个元素推入堆栈,堆栈容量就会翻倍
内部Stack
使用Vector
并且Vector
是一个动态增长的数组。
此外,对于堆栈
,您不能手动设置电容增量
系数,而是堆栈本身在内部管理,您可以查看大小
是堆栈中当前的元素数
capacity
是一个内部细节,它告诉您向量中可以容纳的最大项目数。但是,这实际上并不相关,因为当达到容量时,它会自动扩展。大小是堆栈中当前的元素数
capacity
是一个内部细节,它告诉您向量中可以容纳的最大项目数。但是,这并不真正相关,因为当达到容量时,它将自动扩展。堆栈扩展向量,您可以检查此类
int size()->返回此向量中的组件数。(向量中的最大元素数)
int capacity()->返回此向量的当前容量。(向量中的当前元素)
java.util.Vector中capacity()和size()的区别在于,capacity()返回它可以存储的元素数,而size()给出了方法调用时向量中的元素数。
向量的容量通常在构造函数本身中声明。堆栈扩展向量,您可以检查此类
int size()->返回此向量中的组件数。(向量中的最大元素数)
int capacity()->返回此向量的当前容量。(向量中的当前元素)
java.util.Vector中capacity()和size()的区别在于,capacity()返回它可以存储的元素数,而size()给出了方法调用时向量中的元素数。
向量的容量通常在构造函数本身中声明。Java中的堆栈
数据结构表示后进先出(LIFO)对象堆栈。它扩展了类Vector
,包含五个操作,例如
推
流行音乐
查看堆栈顶部的项目
检查堆栈是否为空并且
在堆栈中搜索项目
当堆栈类如下所示时
public class Stack extends Vector {
}
public E push(E item) {
addElement(item);
return item;
}
创建堆栈时,它不包含任何项。进入堆栈容量和大小
Size
-堆栈当前包含的元素数
容量
-它能够容纳的元件数量
Push
操作的实现如下
public class Stack extends Vector {
}
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
允许检查内部的向量是否能够添加新元素。如果没有足够的空间容纳新元素,向量将增长
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);
}
private-void-reseaccacityhelper(int-minCapacity){
//有溢出意识的代码
如果(最小容量-elementData.length>0)
增长(生产能力);
}
/**
*要分配的最大数组大小。
*有些虚拟机在数组中保留一些头字。
*尝试分配较大的阵列可能会导致
*OutOfMemoryError:请求的数组大小超过VM限制
*/
私有静态最终int MAX_数组大小=Integer.MAX_值-8;
私人空间增长(单位容量){
//有溢出意识的代码
int oldCapacity=elementData.length;
int newCapacity=oldCapacity+((电容增量>0)?
容量增加:旧容量);
if(新容量-最小容量<0)
新容量=最小容量;
if(新容量-最大阵列大小>0)
新容量=大容量(最小容量);
elementData=Arrays.copyOf(elementData,newCapacity);
}
array.copyOf
是一种本机方法,它使用newCapacity
分配新的内存空间,并将数据从旧内存位置复制到新位置。Java中的堆栈
数据结构表示后进先出(LIFO)对象堆栈。它扩展了类Vector
,包含五个操作,例如
推
流行音乐
查看堆栈顶部的项目
检查堆栈是否为空并且
在堆栈中搜索项目
当堆栈类如下所示时
public class Stack extends Vector {
}
public E push(E item) {
addElement(item);
return item;
}
创建堆栈时,它不包含任何项。到头来