Что лучше для повторной инициализации массива: установить нулевое значение путем итерации или просто выделить новый массив? - PullRequest
0 голосов
/ 31 августа 2011

В моем коде у меня есть массив, содержащий около 1000 элементов:

Object[] arr = new Object[1000];

После того, как мой массив заполнен (весь массив или только частично), мне нужно его повторно инициализировать.Из того, что я знаю, у меня есть два варианта: инициализировать его по ключевому слову new или выполнить итерацию по нему и установить для каждого элемента значение null.Я думаю, что первый подход лучше, чем второй, но я также жду ваших мыслей.

Любые ссылки или статьи на эту тему приветствуются.

Заранее спасибо

Ответы [ 4 ]

4 голосов
/ 31 августа 2011

Первый лучше.Повторно инициализируя его с помощью нового ключевого слова, вы предоставляете предыдущий набор массивов для сбора мусора, указывая путь к GC (при условии, что другие живые объекты не имеют ссылки ни на один из них).в конечном итоге достиг бы того же эффекта, но добавленный удар по производительности, потому что вам нужно перебирать один за другим.Для 1000 записей это, скорее всего, произойдет очень быстро, но если их число возрастет, попадание будет больше.

2 голосов
/ 31 августа 2011

Согласитесь с вашим первым выбором, используйте arr = new Object[1000] и не зацикливайте его.

Кроме того, использование нового объекта [1000] не создает 1000 объектов, оно создает «заполнитель» для 1000 объектов, поэтому это очень дешевая операция.

И если вы знаете, что будете заполнять все 1000 объектов, вы можете просто использовать массив без переинициализации.

0 голосов
/ 31 августа 2011

Сначала, установив для массива значение null, вы фактически сообщаете GC, что он может проверить все в этом массиве и очистить его при необходимости.Таким образом, нет необходимости перебирать элементы, даже если вы не собираетесь делать новое сразу.

При этом, единственное время, когда вам действительно понадобится явно установить переменную (для целей GCв любом случае) быть явно NULL, если вам больше не нужны данные, на которые указывает эта переменная, но у вас нет ничего нового, чтобы поставить его на место И переменная по какой-либо причине останется в области действия некоторое время.В этом случае рекомендуется установить значение в null или, еще лучше, переделать ваш код так, чтобы переменная вышла из области видимости, и это сделано для вас.

Так, например, в вашем примере скажите arrбыл статическим членом некоторого класса, и вам просто нужно было выполнить некоторую обработку массива при запуске и никогда больше не смотреть на него.В этом случае содержимое arr будет зависать в течение всего времени, пока ваша программа работает, ЕСЛИ вы явно не установите его в null (или присвойте ему новое значение).

0 голосов
/ 31 августа 2011

Первый - лучший способ Object[] arr = new Object[1000];, также вы можете найти по ссылке ниже, количество способов инициализации массива

инициализация массива

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...