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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top