2016-05-16 2 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()); 

これは私のスタッククラスです:

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; 
} 

私はそのトップを変更することなく、第2のスタックにArrayListを初期化しようとしたが、とき私はこれを試しましたArrayList私のstack2内でstack1.getTop()で初期化されません。私はコンストラクタ内の可変サイズをチェックしており、値を持っています。なぜそれは間違っているのですか?

+0

私はあなたの質問を理解していません。何が問題ですか? –

+2

'arrBook = new arrBook (size);'新しいArrayList (サイズ) 'を意味しますか? – Compass

+0

あなたはどこかのトップの価値を変えていると確信していますか? – attaboy182

答えて

2

ArrayListには、その名前が示すように、配列が付いています。配列は固定サイズです。 ArrayListが配列の容量に近づくと、サイズを変更します。新しい配列を作成し、すべてをコピーして、古い配列を切り捨てます。

ArrayListを「サイズ」で初期化すると、それは実際の初期設定容量になります。 ではありません。は配列に何かを初期化します。 ArrayListは作成後もまだ空です。実際にはArrayListに値を追加する必要があります。

0

ArrayList(n)コンストラクタのint引数は、リストの初期容量を設定するために使用されます。あなたが何かを入れるまで、そのサイズはまだゼロです。最初の容量は内部的に使用されるため、リストにn個以上の項目を入れるまで、リストのスペースを再割り当てする必要はありません。

関連する問題