Очистить массив в Java / обработка

java arrays processing

250397 просмотра

8 ответа

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

Автор: ina Источник Размещён: 12.11.2019 09:55

Ответы (8)


67 плюса

Там в

Arrays.fill(myArray, null);

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

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

Автор: Mark Peters Размещён: 17.11.2010 08:07

26 плюса

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

Автор: jjnguy Размещён: 17.11.2010 08:06

9 плюса

array = new String[array.length];
Автор: Adam Размещён: 17.11.2010 08:08

3 плюса

Это быстрее, чем 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);
}
Автор: R.Moeller Размещён: 07.10.2013 12:08

3 плюса

Если Array xcoне является окончательным, то будет работать простое переназначение:

т.е.

xco = new Float[xco .length];

Это предполагает, что вам нужно, чтобы массив xcoоставался того же размера. Если в этом нет необходимости, создайте пустой массив:

xco= new Float[0];
Автор: Suraj Mahli Размещён: 26.10.2018 01:09

2 плюса

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

Автор: AlexR Размещён: 17.11.2010 08:19

2 плюса

Возьмем в качестве примера двойной массив: если исходный входной 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);
  }
}
Автор: Shiqing Fan Размещён: 31.10.2016 06:29

0 плюса

Я смог сделать это с помощью следующих 2 строк, у меня был массив с именем selected_items, используемый для получения всех выбранных элементов в dataTable

selected_items = null;
selected_items = [];
Автор: Cesar Duran Размещён: 04.02.2018 04:35
Вопросы из категории :
32x32