Utilidade de ArrayList .clear ()?
-
05-07-2019 - |
Pergunta
Eu estava olhando através da documentação Java, e me deparei com o método clear () de ArrayLists.
O que é o uso deste, ao invés de simplesmente reatribuir um novo objeto ArrayList à variável?
Solução
Porque pode haver várias referências à uma lista, talvez seja preferível e / ou mais prático para limpá-la do que a reatribuição de todas as referências.
Se você esvaziar sua matriz muito (dentro de, digamos, uma grande circular) não há nenhum ponto a criação de lotes de objetos temporários. Claro que o coletor de lixo acabará por limpá-los, mas não há nenhum ponto de ser um desperdício de recursos, se você não tem que ser.
E porque limpar a lista é menos trabalho do que criar um novo.
Outras dicas
Você pode ter um campo final (variável de classe) List
:
private final List<Thing> things = ...
Em algum lugar na classe que deseja limpar (remover todas as coisas). Desde things
é final, não pode ser transferido. Além disso, você provavelmente não quer transferir uma nova instância Lista como você já tem um perfeitamente boa lista instanciado.
Imagine a situação em que há múltiplas referências do mesmo java.util.ArrayList
todo o seu código. Seria quase impossível ou muito difícil criar nova instância da lista e atribuir a todas as variáveis. Mas java.util.ArrayList.clear()
faz o truque!
Você paga menos com clara do que você faz com a criação de um novo objeto se o seu objectivo era muito claro.
Reatribuindo uma referência não limpar o objeto. A suposição é que se não há outras referências a ele, seria recuperada pelo GC relativamente breve. Caso contrário, você só tem mesmo uma bagunça.
Além das razões mencionadas, limpando uma lista é muitas vezes mais semanticamente correto do que criar um novo. Se o resultado desejado é uma lista desmarcada, a ação que você deve tomar é apagar a lista, não criar uma nova lista.
clear () não realocar um novo objeto, por isso é menos de um acerto de desempenho.