配列の各要素をループして各要素をnullに設定する以外に、Java /配列を単に空にする(または破棄して、新しいとして再宣言できるようにする)処理のネイティブ関数がありますアレイ)?
あります
Arrays.fill(myArray, null);
自分でやるのとは違うことをするわけではありません(すべての要素をループしてnullに設定するだけです)。これは、これを実行する純粋なJavaコードであるという点ではネイティブではありませんが、おそらくisは、それが意図したものであればライブラリ関数です。
もちろん、これが--emptyの意味であればresize配列(ゼロに)することはできません。配列のサイズは固定されているため、「新しい」配列の次元を変えたい場合は、他の答えが示すように、参照を新しい配列に再割り当てするのが最善です。さらに良いことに、可変サイズを持つことができるList
のようなArrayList
タイプを使用します。
null
を参照に割り当てるだけです。 (これは、ints
だけでなく、あらゆるタイプの配列で機能します)
int[] arr = new int[]{1, 2, 3, 4};
arr = null;
これにより、配列が「クリア」されます。必要に応じて、その参照に新しい配列を割り当てることもできます。
int[] arr = new int[]{1, 2, 3, 4};
arr = new int[]{6, 7, 8, 9};
メモリリークが心配な場合は、気にしないでください。ガベージコレクターは、配列によって残された参照をクリーンアップします。
もう一つの例:
float[] arr = ;// some array that you want to clear
arr = new float[arr.length];
これにより、floatのデフォルト値に初期化された新しいfloat[]
が作成されます。
array = new String[array.length];
配列xco
が最終でない場合、単純な再割り当てが機能します。
つまり.
xco = new Float[xco .length];
これは、同じサイズを維持するために配列xco
が必要であることを前提としています。それが必要でない場合は、空の配列を作成します。
xco= new Float[0];
これにより、Arrays.fillよりもクリアが高速になります(From Fast Serialization Lib)。 arrayCopy(ネイティブ)を使用して配列をクリアします。
static Object[] EmptyObjArray = new Object[10000];
public static void clear(Object[] arr) {
final int arrlen = arr.length;
clear(arr, arrlen);
}
public static void clear(Object[] arr, int arrlen) {
int count = 0;
final int length = EmptyObjArray.length;
while( arrlen - count > length) {
System.arraycopy(EmptyObjArray,0,arr,count, length);
count += length;
}
System.arraycopy(EmptyObjArray,0,arr,count, arrlen -count);
}
例としてダブル配列を使用します。初期入力values
配列が空ではないの場合、次のコードスニペットは従来の直接for-loop
よりも時間の複雑さにおいて優れています。
public static void resetValues(double[] values) {
int len = values.length;
if (len > 0) {
values[0] = 0.0;
}
for (int i = 1; i < len; i += i) {
System.arraycopy(values, 0, values, i, ((len - i) < i) ? (len - i) : i);
}
}
マークのコメントに何か追加したいだけです。追加の割り当てなしで配列を再利用する場合は、再度使用して、既存の値を新しい値で上書きします。配列を順番に満たせば機能します。この場合、最後に初期化された要素を覚えて、このインデックスまで配列を使用します。配列の最後にゴミがあることは問題ではありません。
私は次の2行でそれを行うことができました
selected_items = null;
selected_items = [];