1
resposta

Vantagens de inicializar a capacidade de um arraylist?

Boa tarde. Ao criar um arraylist, iniciar sua capacidade é vantajoso? pq?

ArrayList lista = new ArrayList(15);

1 resposta

Ola Jade.

Como o ArrayList contem um array interno para guardar os dados, esse array interno precisa ser iniciado (pois não podemos criar um array nativo sem o valor da quantidade de registros suportadas). Para que o ArrayList seja uma lista auto escalavel, ou seja, podermos adicionar quantos dados quisermos, o algoritmo da classe ArrayList inicia por padrão um valor interno ao array, tipo 10 registros. Ao alcançar esses 10 registros, o algoritmo vai criar uma copia do array interno e "infla-la" mais 10 registros, e assim por diante. Isso significa que ao alcançar um determinado numero de registros, o ArrayList vai precisar para um pouco para fazer essa expansão, o que causa uma certa lentidão (milessegundos, mas causa).

Assim, ao iniciar o ArrayList com uma quantidade de registros internos maior, essa lentidão para a expansão do array dentro do ArrayList vai ser mais tarde.

Mas veja que o ganho de milessegundos em sistemas que não precise dessa performance não afetaria o usuário da aplicação. Assim normalmente usamos o ArrayList sem passar valores iniciais do array interno, a não ser alguma operação muito critica. Aliás, se é uma operação que precisa de velocidade, talvez a análise de mudança para HashSet seria mais viável do que passar o valor inicial do array no ArrayList...