[collections]Qual jeito é mais rápido?

6 respostas
_fs

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!

6 Respostas

sergiolopes

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

Paulo_Silveira

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!)

louds

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.

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.

louds

“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.

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.

_fs

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

muitíssimo obrigado a todos :smiley:

Criado 18 de março de 2004
Ultima resposta 19 de mar. de 2004
Respostas 6
Participantes 4