[collections]Qual jeito é mais rápido?

Olá, boa noite.

Pergunta simples: tratando com collections, mais especificamente ArrayLists neste caso, qual destas três maneiras é a mais rápida (em termos de processamentio) para limpar o conteúdo do mesmo?

List list = new ArrayList();
list.add( "a" );
list.add( "b" );
list.add( "c" );

//maneira 1
list.clear();

//maneira 2
list.removeAll( list );

//maneira 3
list = new ArrayList();

Então?

Valeu!

vc quer limpar ou jogar a lista fora? se for jogar fora (pelo q vi, usando o new), faça

list = null;

é o mais eficiente, pois vc nao esta limpando uma lista e nem criando uma nova em cima… ta simplemente jogando a referencia pro objeto fora… aí o garbage collector trata de tirar sua arraylist da memoria

acho que voce quer limpar pra reutilizar neh?
entao o new eh mais rapido no caso geral, porque o clear remove um por um elemento (fazendo ser igual a null), o que pode ser “lento” se sua arraylist for bem grande. alem de tudo, a ArrayList de X elementos continua com a mesma capacidade.

eu evito usar esses .clear (repare como o .clear de um HashMap eh zoado: ele soh lipa as entries, nao os values!)

Eu uso o .clear quando possivel, dado que isso diminui a pressão no garbage collector e a grande maioria dos meus objetos são imutaveis.

o .clear eh O(n), cuidado louds. sem contar que voce coclocou 10 mil objetos na arraylist, a array de Object continua com 10 mill nulls, eh pouco, mas sao 40k.

[quote=“Paulo Silveira”]
o .clear eh O(n), cuidado louds. sem contar que voce coclocou 10 mil objetos na arraylist, a array de Object continua com 10 mill nulls, eh pouco, mas sao 40k.[/quote]

Sim, porém como o arraylist vai ser reusado no mesmo lugar, é de se esperar que o uso de espaço vai ser semelhante. Para 10k elementos acredito que atribuir null para todas posições vai ser mais barato que as várias alocações que vão ocorrer devido a expansão do array.

Eu digo que é questão de gosto por não achar que vai ocorrer um grande impacto na performance. Isso, claro, vale somente se o array for ser reutilizado.

Entendi perfeitamente todos os replies, vou aplicar cada jeito ao caso onde ele melhor se encaixa :slight_smile:

muitíssimo obrigado a todos :smiley: