2016-05-16 108 views
0

我创建一个名为StackOfBook的堆栈类。我需要2个栈,所以我创建这个对我的主类:ArrayList初始大小不起作用

StackOfBook stack1 = new StackOfBook(); 

while (true) { 
    long number = sc.nextLong(); 
    if (number == -1) { 
     break; 
    } 
    stack1.push(number); 
} 

StackOfBook stack2 = new StackOfBook(stack1.getTop()); 

这是我的Stack类:

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不改变它的顶部,但是当我试过这个ArrayList在我的堆栈2不会初始化为stack1.getTop()。我在构造函数中检查了变量大小,它有一个值。为什么它错了?

+0

我不明白你的问题。问题是什么? –

+2

'arrBook = new arrBook (size);'你的意思是'新的ArrayList (size)'? – Compass

+0

你确定你正在改变某处顶部的价值? – attaboy182

回答

2

ArrayList支持,如其名称所示,是一个数组。数组是固定大小的;当ArrayList接近阵列的容量时,它调整它的大小 - 它创建一个新阵列,将所有内容复制并丢弃旧阵列。

当您使用“大小”初始化ArrayList时,这实际上是其初始默认容量。它不会而不是初始化任何东西到数组中。创建后ArrayList仍为空;您仍然需要实际将值添加到ArrayList

0

ArrayList(n)构造函数的int参数仅用于设置列表的初始容量。它的大小仍然是零,直到你把东西放进去。初始容量在内部使用,以便列表不必重新分配更多空间,直到您放入超过n个项目为止。