Полноценность ArrayList <E> .clear ()?

Использование лучшего паттерна

 $Pattern = '^Backup-ID|^Policy|^Primary Copy|^Expires|^Copy Number|^Fragment Size|^Expires|^MediaID'

и RegEx для разделения выходного сигнала на Backup-ID

(Get-Content .\test.txt|Select-String -Pattern $Pattern|Out-String) -split "(?=Backup-ID)"|ForEach-Object {
    ((

Использование лучшего паттерна

[110]

и RegEx для разделения выходного сигнала на Backup-ID

[111] <час>
hostname01,VM_weekly,23,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX122,3,6188832,1/5/2024 3:19:13 AM,XXX134
hostname02,VM_weekly2,24,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX244,3,6188832,1/5/2024 3:19:13 AM,XXX199,4,6188832,1/5/2024 3:19:13 AM,XXX177
-split "`r?`n" | %{(

Использование лучшего паттерна

[110]

и RegEx для разделения выходного сигнала на Backup-ID

[111] <час>
hostname01,VM_weekly,23,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX122,3,6188832,1/5/2024 3:19:13 AM,XXX134
hostname02,VM_weekly2,24,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX244,3,6188832,1/5/2024 3:19:13 AM,XXX199,4,6188832,1/5/2024 3:19:13 AM,XXX177
-split ":\s+",2)[1]}) -join ',').Trim(',') }
<час>
hostname01,VM_weekly,23,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX122,3,6188832,1/5/2024 3:19:13 AM,XXX134
hostname02,VM_weekly2,24,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX244,3,6188832,1/5/2024 3:19:13 AM,XXX199,4,6188832,1/5/2024 3:19:13 AM,XXX177
5
задан lfaraone 5 May 2009 в 22:43
поделиться

6 ответов

Поскольку может быть несколько ссылок на один список, может быть предпочтительнее и / или более практично очистить его, чем переназначить все ссылки.

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

И потому что очистка списка - это меньше работы, чем создание нового.

14
ответ дан 18 December 2019 в 06:36
поделиться

Возможно, у вас есть последнее поле (переменная класса) Список :

private final List<Thing> things = ...

Где-то в классе вы хотите очистить (удалить все) вещи. Поскольку вещи являются окончательными, они не могут быть переназначены. Более того, вы, вероятно, не хотите переназначать новый экземпляр List, так как у вас уже есть отличный экземпляр List.

3
ответ дан 18 December 2019 в 06:36
поделиться

Представьте себе ситуацию, когда в вашем коде есть несколько ссылок на один и тот же java.util.ArrayList , Было бы почти невозможно или очень сложно создать новый экземпляр списка и назначить его всем переменным. Но java.util.ArrayList.clear () добивается цели!

2
ответ дан 18 December 2019 в 06:36
поделиться

clear () не перераспределяет новый объект, поэтому это меньше влияет на производительность.

1
ответ дан 18 December 2019 в 06:36
поделиться

Вы платите меньше с чистым, чем с созданием нового объекта, если ваша цель была действительно очистить.

Переназначение ссылки не очищает объект. Предполагается, что если нет других ссылок на него, он будет исправлен GC относительно скоро. В противном случае, вы только что запутались.

2
ответ дан 18 December 2019 в 06:36
поделиться

In addition to the reasons mentioned, clearing a list is often more semantically correct than creating a new one. If your desired outcome is a cleared list, the action you should take is to clear the list, not create a new list.

2
ответ дан 18 December 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: