Подтвердить что ты не робот

Пустой массив в Java/обработка

Помимо прокрутки каждого элемента в массиве и установки каждого из них в null, существует ли встроенная функция в Java/processing, чтобы просто очистить массив (или уничтожить его, чтобы обновить его как новый массив)?

4b9b3361

Ответ 1

Там же

Arrays.fill(myArray, null);

Не то, чтобы он делал что-то другое, чем вы делали самостоятельно (он просто прокручивает каждый элемент и устанавливает его в null). Это не является родным в том, что это чистый Java-код, который выполняет это, но это библиотечная функция, возможно, это то, что вы имели в виду.

Это, конечно, не позволяет изменять размер массива (до нуля), если это то, что вы подразумевали под "Пустой". Размеры массива фиксированы, поэтому, если вы хотите, чтобы "новый" массив имел разные размеры, вам лучше всего переназначить ссылку на новый массив, как показывают другие ответы. Еще лучше используйте тип List типа ArrayList, который может иметь переменный размер.

Ответ 2

Вы можете просто назначить 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.

Ответ 3

array = new String[array.length];

Ответ 4

Быстрая очистка, чем Arrays.fill с этим (от 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);
}

Ответ 5

Я просто хочу добавить что-то комментарий Mark. Если вы хотите повторно использовать массив без дополнительного выделения, просто используйте его снова и переопределите существующие значения новыми. Он будет работать, если вы последовательно заполните массив. В этом случае просто запомните последний инициализированный элемент и используйте массив до этого индекса. Не имеет значения, что в конце массива есть мусор.

Ответ 6

В качестве примера возьмем двойной массив, если исходный массив ввода 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);
  }
}

Ответ 7

Создать массив:

ArrayList<String> User = new ArrayList<String>();

Этот массив можно очистить с помощью

User.clear();