例外Exception in thread "main" Java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
以下のコードの場合。しかし、その理由は理解できませんでした。
public class App {
public static void main(String[] args) {
ArrayList<String> s = new ArrayList<>();
//Set index deliberately as 1 (not zero)
s.add(1,"Elephant");
System.out.println(s.size());
}
}
私はそれを動作させることができますが、概念を理解しようとしているので、宣言を以下に変更しましたが、どちらも動作しませんでした。
ArrayList<String> s = new ArrayList<>(10)
ArrayListインデックスは0(ゼロ)から始まります
配列リストのサイズが0で、最初のインデックスに文字列要素を追加しています。 0番目のインデックスに要素を追加しないと、次のインデックス位置を追加できません。それは間違っています。
だから、単純に
s.add("Elephant");
またはできる
s.add(0,"Elephant");
ArrayListに要素を0、1などから順番に追加する必要があります。
要素を特定の位置に追加する必要がある場合は、以下を実行できます-
String[] strings = new String[5];
strings[1] = "Elephant";
List<String> s = Arrays.asList(strings);
System.out.println(s);
これにより、次のような出力が生成されます。
[null, Elephant, null, null, null]
ArrayList
は空です。この行で:
s.add(1,"Elephant");
追加しようとしています"Elephant"
インデックス1
のArrayList
(2番目の位置)は存在しないため、IndexOutOfBoundsException
をスローします。
使用する
s.add("Elephant");
代わりに。
Androidの場合:
ギャップが多いリストを使用する必要がある場合は、メモリの観点から SparseArray
を使用することをお勧めします(ArrayList
は、 null
エントリ)。
使用例:
_SparseArray<String> list = new SparseArray<>();
list.put(99, "string1");
list.put(23, "string2");
list.put(45, "string3");
_
list.append()
を使用します...list.put()
を使用します。リストで数百を超えるアイテムを使用する場合は、 HashMap
を使用することをお勧めします。これは、ルックアップではバイナリ検索が必要であり、追加と削除では配列へのエントリの挿入と削除が必要になるためです。
add(int index, E element)
APIによると、配列リストのサイズはゼロであり、要素を最初のインデックスに追加しています
スロー:
_IndexOutOfBoundsException - if the index is out of range (index < 0 || index > size())
_
代わりに boolean add(E e)
を使用してください。
[〜#〜] update [〜#〜]質問の更新に基づいて
私はそれを動作させることができますが、概念を理解しようとしているので、宣言を以下に変更しましたが、どちらも動作しませんでした。
_ArrayList<String> s = new ArrayList<>(10)
_
new ArrayList<Integer>(10)
を呼び出すと、リストの初期容量がサイズではなく10に設定されます。つまり、この方法で作成された配列リストは空の状態で始まります。
次のようにして、ArrayListのサイズ(容量ではない)を初期化できます。
ArrayList<T> list = new ArrayList<T>(Arrays.asList(new T[size]));
あなたの場合:
ArrayList<String> s = new ArrayList<String>(Arrays.asList(new String[10]));
これにより、10個のnull要素を持つArrayListが作成されるため、サイズ(インデックス0〜9)内でランダムな順序で要素を追加できます。
インデックス1に「象」が本当に必要な場合は、インデックス0に別の(nullなど)エントリを追加できます。
public class App {
public static void main(String[] args) {
ArrayList<String> s = new ArrayList<>();
s.add(null);
s.add("Elephant");
System.out.println(s.size());
}
}
または、呼び出しを.add
に変更して、インデックス0にnullを指定し、インデックス1に象を指定します。
リストにインデックスを直接1として追加しないでくださいリストに値を追加する場合は、次のように追加しますs.add( "Elephant");デフォルトのリストサイズは0です。リストに要素を追加すると、サイズが自動的に増加し、リストの最初のインデックスに直接追加することはできません。 //s.add(0、 "Elephant");
ArrayListは自己拡張可能ではありません。インデックス1にアイテムを追加するには、要素#0が必要です。