私は簡単な質問があります。私は、クラス内で変化する長さが必要なJavaの整数配列を持っています。具体的には、特定の状況で1つ増やす必要があります。私はこれを試した。配列の長さを増やす方法
sbgHeadX = new int[ numberOfSBG ];
私が必要としたときに整数変数numberOfSBGを増やすことになりましたが、これはうまくいかないと思います。他の方法はありますか?
私は簡単な質問があります。私は、クラス内で変化する長さが必要なJavaの整数配列を持っています。具体的には、特定の状況で1つ増やす必要があります。私はこれを試した。配列の長さを増やす方法
sbgHeadX = new int[ numberOfSBG ];
私が必要としたときに整数変数numberOfSBGを増やすことになりましたが、これはうまくいかないと思います。他の方法はありますか?
を使用します。作成されると、配列サイズを変更することはできません。
配列は、単一の型の固定数の値を保持するコンテナオブジェクトです。配列の長さは、配列の作成時に設定されます。作成後、その長さは固定されます。
(Source)
arraylistの特定のインデックスにはどうすればアクセスできますか? – kullalok
@ user1276078 'yourArraylist.get(2)'は 'yourClassicArray [2]'と同等です – talnicolas
これは動作しますが、OPがプリミティブintであることを示すので、不要なオートボクシングが発生する可能性があります。 JavaコレクションではObjectが必要です。そのため、JVMは、コレクションメソッドが呼び出されるたびにすべての値をIntegerに変換します。これは時間が経つにつれて高価になる可能性があります。明らかに、プログラマーは、Hunter McMillenのようなことをすることの「オーバーヘッド」に値するかどうかを判断する必要がありますが、彼の答えはIMHOです。質問に対するより正確な答えです。 –
定義では、配列は固定サイズです。その代わりに「動的サイズ」の配列であるArraylistを使うことができます。実際に何が起こるかは、VMがArrayListによって公開される配列のサイズを調整することです。
*
は、私はあなたはもう長さを心配する必要はありませんようご ArrayListを使用することをお勧めバックコピーアレイ*「実際に何が起こるかは、VMがarraylistによって公開されているアレイのサイズを調整することです。間違っています。実際、 'ArrayList'のコードは新しいバッキング配列を作成し、既存のバッキング配列の内容をコピーします。配列の長さは、JVMでも変更することはできません。これはJava言語仕様に違反します。 –
@StephenCあなたはそうです。説明するときのミスフォールト。 –
あなたはまだ半分の権利しかありません。調整を行っているのはJVMではありません。 'ArrayList'クラスは通常のJavaコードでそれを行います。配列は配列リストによって公開されません...配列リストによって隠されたプライベートオブジェクトです。 –
あなたが望んでいないかのArrayListを使用できない場合は、その後、ユーティリティメソッドがあります:維持しながら、新しいサイズを指定することができます
Arrays.copyOf()
要素。
"このアルゴリズムは、他のクイックソートを二次的な性能に劣化させる多くのデータセットでn * log(n)の性能を提供します。 –
Javaの配列は、宣言時に指定された固定サイズです。配列のサイズを大きくするには、より大きなサイズの新しい配列を作成し、すべての古い値を新しい配列にコピーする必要があります。
例:
char[] copyFrom = { 'a', 'b', 'c', 'd', 'e' };
char[] copyTo = new char[7];
System.out.println(Arrays.toString(copyFrom));
System.arraycopy(copyFrom, 0, copyTo, 0, copyFrom.length);
System.out.println(Arrays.toString(copyTo));
代わりにあなたがリストのような動的なデータ構造を使用することができます。
IMHOは、 'Arrays.copyOf()'を使って、Jakubの答えのように、より短い、より読みやすいコードを提供します。 – ToolmakerSteve
Item[] newItemList = new Item[itemList.length+1];
//for loop to go thorough the list one by one
for(int i=0; i< itemList.length;i++){
//value is stored here in the new list from the old one
newItemList[i]=itemList[i];
}
//all the values of the itemLists are stored in a bigger array named newItemList
itemList=newItemList;
ArrayListを使用できます。配列のサイズは固定です。
ここにはExampleがお手伝いします。この例は出力が非常に簡単です。
Output: 2 5 1 23 14
New length: 20
Element at Index 5:29
List size: 6
Removing element at index 2: 1
2 5 23 14 29
妥当な最大値を指定できますか。明らかにあなたの配列はInteger.MAX_VALUEよりも大きくなることはありませんが、あなたの配列が300よりも大きくならないことが分かっていれば、その長さを300に設定することもできます。 – emory
@emory - 個人的には、 code smell:結果は配列であり、その要素のうちのいくつかは「使用されるべきではない」ものです。これは、エラーが発生しやすく、不器用なコーディングスタイルであり、有効な要素の数で別の変数を渡す必要があります。また、 '.size()'が扱う要素の数をもたらすという前提を打破します。 – ToolmakerSteve