Помимо прокрутки каждого элемента в массиве и установки каждого из них в null, существует ли встроенная функция в Java/processing, чтобы просто очистить массив (или уничтожить его, чтобы обновить его как новый массив)?
Пустой массив в Java/обработка
Ответ 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();