ArrayListの初期サイズを設定するには、次のようにします。
ArrayList<Integer> arr=new ArrayList<Integer>(10);
しかし、あなたはできません
arr.add(5, 10);
範囲外の例外が発生するためです。
割り当てたスペースにアクセスできない場合、初期サイズを設定する用途は何ですか?
add関数はadd(int index, Object element)
、インデックス10に追加しないように定義されています。
ArrayListの初期サイズを設定するには、次のようにします。
ArrayList<Integer> arr=new ArrayList<Integer>(10);
しかし、あなたはできません
arr.add(5, 10);
範囲外の例外が発生するためです。
割り当てたスペースにアクセスできない場合、初期サイズを設定する用途は何ですか?
add関数はadd(int index, Object element)
、インデックス10に追加しないように定義されています。
配列リストのサイズとその容量を混同しています。
を呼び出すときは、リストのサイズではなくnew ArrayList<Integer>(10)
、リストの初期容量を設定しています。言い換えると、この方法で構築されると、配列リストは空の状態から始まります。
配列リストに10個の要素を追加する1つの方法は、ループを使用することです。
for (int i = 0; i < 10; i++) {
arr.add(0);
}
これにより、インデックス0..9の要素を変更できるようになります。
事前定義されたサイズのリストが必要な場合は、次も使用できます。
List<Integer> arr = Arrays.asList(new Integer[10]);
Collections.fill(list、obj);を使用する場合 繰り返しオブジェクトでリストを埋めるために、代わりに使用することができます
ArrayList<Integer> arr=new ArrayList<Integer>(Collections.nCopies(10, 0));
この行は、ArrayListに0を10回コピーします
の容量はそのサイズArrayList
と同じではありません。サイズは、 (およびその他の実装)に含まれる要素の数と同じです。ArrayList
List
容量は、の要素を内部的に格納するために使用される基になる配列の長さであり、ArrayList
常にリストのサイズ以上です。
set(index, element)
リストを呼び出す場合、は、配列の長さ(=容量)(実装の詳細固有)ではなくindex
、リスト要素の実際の数(=サイズ)(コードではゼロであるため、がスローされます)に関連します。AIOOBE
にArrayList
)。
このメソッドは、実際には配列によって実装されるのではなく、エントリのリンクされたチェーンとして実装されるなど、set
すべての実装に共通です。List
LinkedList
編集:実際にはadd(index, element)
ではなくメソッドを使用しますset(index, element)
が、原則はここでも同じです。
インデックス付きの要素を追加する場合は、代わりに配列を使用できます。
String [] test = new String[length];
test[0] = "add";
10はALの初期容量であり、サイズ(0)ではありません。要素を多く追加する場合は、初期容量を高い値に指定する必要があります。これは、要素を追加し続けるときに容量を拡張するオーバーヘッドを回避できるためです。
あなたの質問に対する正確な答えは次のようになると思います。
ArrayListに初期サイズを設定すると、nrが減少します。多くの場合、内部メモリの再割り当てが発生する必要があります。リストは配列によって支えられています。つまり、初期容量0を指定した場合、要素の最初の挿入時に、内部配列のサイズを変更する必要があります。リストが保持する要素の数がおおよそわかっている場合は、初期容量を設定するとnrが減少します。リストの使用中に発生するメモリの再割り当ての数。
これは誰かを助けるかもしれません-
ArrayList<Integer> integerArrayList = new ArrayList<>(Arrays.asList(new Integer[10]));
これに遅れていますが、Java 8の後、私は個人的に、Stream
APIを使用したこの次のアプローチがより簡潔であり、受け入れられた答えの代わりになる可能性があると感じています。
例えば、
Arrays.stream(new int[size]).boxed().collect(Collectors.toList())
ここsize
で、は目的のList
サイズであり、ここで説明する欠点がない場合、のすべての要素はとしList
て初期化され0
ます。
(クイック検索を行ったところ、stream
投稿された回答は見つかりませんでした。この回答が冗長であり、削除できるかどうかをお気軽にお知らせください)
現在、リストには要素がないため、リストが存在しない場合は、リストのインデックス5に追加できません。リストの容量と現在のサイズを混同しています。
電話するだけです:
arr.add(10)
ArrayListに整数を追加します
同様の問題に直面しました。arrayListがListインターフェイスのサイズ変更可能な配列の実装であることを知っているだけで、任意のポイントに要素を追加できると思いますが、少なくとも初期サイズを定義するオプションがあります。とにかく、最初に配列を作成し、それを次のようなリストに変換できます。
int index = 5;
int size = 10;
Integer[] array = new Integer[size];
array[index] = value;
...
List<Integer> list = Arrays.asList(array);
また
List<Integer> list = Arrays.asList(new Integer[size]);
list.set(index, value);
配列リストの容量は10ですが、実際のリストには要素がありません。addメソッドは、要素を実際のリストに挿入するために使用されます。要素がないため、5のインデックスに要素を挿入することはできません。
10個のアイテムを追加したい場合は、次のArrayList
ことを試してください。
for (int i = 0; i < 10; i++)
arr.add(i);
配列サイズ変数をすでに宣言している場合はsize
、数値「10」の代わりに変数を使用します
ArrayList myList = new ArrayList(10);
// myList.add(3, "DDD");
// myList.add(9, "III");
myList.add(0, "AAA");
myList.add(1, "BBB");
for(String item:myList){
System.out.println("inside list : "+item);
}
/ * arraylistの初期容量は、内部でシフト時間を節約することに他なりません。要素を内部的に追加すると、容量がチェックされて容量が増加します。最初に0インデックスで要素を追加し、次に1というように追加できます。* /
私の2セントStream
。使うほうがいいと思います
IntStream.generate(i -> MyClass.contruct())
.limit(INT_SIZE)
.collect(Collectors.toList());
初期値を柔軟に入力できます。
貢献..
List <Destination\> destinations = Collections.nCopies(source.size(), Destination.class.newInstance());