2012-03-12 9 views
1

を追加するとき、私はこの配列を持っている:JavaのArrayListのoutofboundsがアイテム

ArrayList<Problem> problems = new ArrayList <Problem>(100); 

その後、私はそれに入れてオブジェクトを作ってみる:

Problem p = new Problem(); 
p.setProblemName("Some text"); 

その後、私はにオブジェクトを追加しよう配列:

problems.set(1, p); 

しかし、この時点でシステムは、実行時例外がスローされます:

03-12 18:58:04.573: E/AndroidRuntime(813): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0 

しかし、私は配列の初期サイズを100に増やします。なぜこのエラーは起こりますか?これはまあまあまあまあです。

ありがとうございます!

答えて

2

setを追加してArrayListに追加すると、既存の要素を上書きするために使用されません。

problems.set(1, p); //Overwrite the element at position 1 

あなたはインデックス1でそれを追加します終了

problems.add(1, p); 

でそれを追加します

problems.add(p); 

addを使用し、これは
インデックス< 0またはインデックスのためにはIndexOutOfBoundsExceptionがスローされます>ArrayList.size()。どの追加の最初の試行の場合になります。

また、ちょうどあなたの知識を

problems.add(ArrayList.size(), p); //Works the same as problems.add(p); 
2

ArrayList#set()

例外: IndexOutOfBoundsExceptionを - インデックスが配列リスト内の要素の数ではなく、容量を返しsize()範囲外(index < 0 || index >= size())

ある場合。あなたがArrayList<Problem> problems = new ArrayList <Problem>(100);を書くとき

1

、あなただけが0

あなたのサイズを持っているあなたは(基本となる配列のサイズを最適化)能力のようなものが、まだリストを使用しようとしていると思うのJavaを伝えます必要がありますadd()

problems.add(p); 

は、最初の位置にpを追加します。

List<Problem> problems = new ArrayList <Problem>(); 
Problem p = new Problem(); 
p.setProblemName("Some text"); 

problems.add(p); 

Problem p2 = problems.get(0); //p2 == p 
0

あなたの代わりにこれを書く必要があります。

problems.add(0, p); 

あなたが1位にPを挿入したい任意の0番目のメンバーを持っていません!

+2

セットは機能しません。 'ArrayList'にはまだ要素がありませんので、Size = 0です。インデックスが> = sizeの場合はthrowsとIndexOfOutBoundsExceptionを設定します。 – twain249

+0

彼は同じ例外を取得します... – assylias

+0

ありがとう、私はインデックスを追加しました:D –

-1

は、配列内の最初の位置は常に0

あなたが.addを使用する必要があります編集(ある

problems.set(0, p); 

を試してみてください)メソッドを使用して配列にオブジェクトを追加することもできます。

+0

私は0に設定すると、このエラーが発生します:java.lang.IndexOutOfBoundsException:無効なインデックス0、サイズは0です – GeekedOut

+0

リストに要素がない場合、Setは機能しません。彼はaddを使わなければならない。セットは 'index <0 ||インデックス> =サイズサイズ= 0の場合、常に失敗します。 – twain249