我创建了一个名为StackOfBook
的堆栈类。我需要2个堆栈,所以我在我的主类上创建它:
StackOfBook stack1 = new StackOfBook();
while (true) {
long number = sc.nextLong();
if (number == -1) {
break;
}
stack1.push(number);
}
StackOfBook stack2 = new StackOfBook(stack1.getTop());
这是我的堆栈类:
private int top = 0;
private ArrayList<Long> arrBook;
public StackOfBook(){
arrBook = new ArrayList<Long>();
}
public StackOfBook(int size){
arrBook= new arrBook<Long>(size);
}
public int getTop() {
return this.top;
}
我尝试初始化第二个堆栈中的ArrayList
而不更改其顶部,但是当我尝试这个时,我的stack2中的ArrayList
不会使用stack1.getTop()
进行初始化。我检查了构造函数中的变量大小,它有一个值。为什么这是错的?
答案 0 :(得分:2)
ArrayList
支持一个数组。数组是固定大小的;当ArrayList
接近数组的容量时,它会调整大小 - 它会创建一个新数组,复制所有内容,然后抛弃旧数组。
当您使用&#34;尺寸&#34;初始化ArrayList
时,它实际上是其初始默认容量。它不将任何内容初始化为数组。创建后ArrayList
仍为空;您仍需要实际向ArrayList
添加值。
答案 1 :(得分:0)
ArrayList(n)构造函数的int参数仅用于设置列表的初始容量。它的大小仍为零,直到你把东西放进去。初始容量在内部使用,以便列表不必重新分配更多空间,直到您在其中放置超过n个项目。