Boa tarde. Ao criar um arraylist, iniciar sua capacidade é vantajoso? pq?
ArrayList lista = new ArrayList(15);
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Boa tarde. Ao criar um arraylist, iniciar sua capacidade é vantajoso? pq?
ArrayList lista = new ArrayList(15);
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...