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();
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!)
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.