web-dev-qa-db-ja.com

Java / processingの配列を空にします

配列の各要素をループして各要素をnullに設定する以外に、Java /配列を単に空にする(または破棄して、新しいとして再宣言できるようにする)処理のネイティブ関数がありますアレイ)?

37
ina

あります

Arrays.fill(myArray, null);

自分でやるのとは違うことをするわけではありません(すべての要素をループしてnullに設定するだけです)。これは、これを実行する純粋なJavaコードであるという点ではネイティブではありませんが、おそらくisは、それが意図したものであればライブラリ関数です。

もちろん、これが--emptyの意味であればresize配列(ゼロに)することはできません。配列のサイズは固定されているため、「新しい」配列の次元を変えたい場合は、他の答えが示すように、参照を新しい配列に再割り当てするのが最善です。さらに良いことに、可変サイズを持つことができるListのようなArrayListタイプを使用します。

65
Mark Peters

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[]が作成されます。

24
jjnguy
array = new String[array.length];
7
Adam

配列xcoが最終でない場合、単純な再割り当てが機能します。

つまり.

xco = new Float[xco .length];

これは、同じサイズを維持するために配列xcoが必要であることを前提としています。それが必要でない場合は、空の配列を作成します。

xco= new Float[0];
2
Suraj Mahli

これにより、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);
}
2
R.Moeller

例としてダブル配列を使用します。初期入力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);
  }
}
1
Shiqing Fan

マークのコメントに何か追加したいだけです。追加の割り当てなしで配列を再利用する場合は、再度使用して、既存の値を新しい値で上書きします。配列を順番に満たせば機能します。この場合、最後に初期化された要素を覚えて、このインデックスまで配列を使用します。配列の最後にゴミがあることは問題ではありません。

1
AlexR

私は次の2行でそれを行うことができました

selected_items = null;
selected_items = [];
0
Cesar Duran