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

java arrays processing

250397 просмотра

8 ответа

8597 Репутация автора

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

Автор: ina Источник Размещён: 17.11.2010 08:04

Ответы (8)


26 плюса

112296 Репутация автора

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

67 плюса

70387 Репутация автора

Там в

Arrays.fill(myArray, null);

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

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

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

9 плюса

32176 Репутация автора

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

2 плюса

102469 Репутация автора

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

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

3 плюса

2878 Репутация автора

Это быстрее, чем 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

2 плюса

321 Репутация автора

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

339 Репутация автора

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

selected_items = null;
selected_items = [];
Автор: Cesar Duran Размещён: 04.02.2018 04:35

3 плюса

29 Репутация автора

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

т.е.

xco = new Float[xco .length];

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

xco= new Float[0];
Автор: Suraj Mahli Размещён: 26.10.2018 01:09
Вопросы из категории :
32x32