Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

O que se ganha definindo tamanho da ArrayList?

Prezados, boa noite!

Na parte Outras formas de inicialização, é citado que existe a possibilidade de definir um tamanho inicial ao ArrayList, segue o exemplo dado: ArrayList lista = new ArrayList(26); a lista continua dinâmica mas o tamanho do array inicial é de 26!.

Efetuei o teste, criei um ArrayList e defini o tamanho do ArrayList de 4. Sem colocar nada no ArrayList, chamei o método .size() no mesmo e ele retornou 0.

Apesar de entender que o .size() é utilizado para contar elementos dentro do ArrayList, e o .length em um Array é utilizado para saber a capacidade do mesmo, me vem a pergunta: Tem alguma utilidade definir tamanho em ArrayList? Seria isso apenas para ser um código mais legível, para ganhar alguma performance ou para "nada"?

Alguém saberia me explicar? Obrigado!

1 resposta
solução!

Oi Falcão,

O método size() do ArrayList sempre devolve o número de elementos contidos na lista, independente da capacidade de elementos do array.

Se você cria um ArrayList sem passar um tamanho inicial:

ArrayList lista = new ArrayList();

Ele vai criar com a capacidade inicial padrão(que se não me engano é zero).

Daí sempre que você adicionar um elemento à lista, o ArrayList vai precisar fazer a operação de "expandir", para aumentar a capacidade.

No geral, isso não causa problemas de performance, mas se você tem um código onde já sabe que vai precisar adicionar 50 elementos, seria mais performático já instanciar passando o valor inicial como 50:

ArrayList lista = new ArrayList(50);

Pois assim vai evitar a operação de expandir para cada elemento adicionado. Isso certamente vai melhorar a performance, mas essa operação de expandir o ArrayList já é rápida, e por isso acaba não sendo muito útil passar um valor inicial ao instanciar o ArrayList.

Acredito que seria útil apenas em casos muitos específicos, onde já se quer instanciar um ArrayList e inserir na sequencia milhares de registros...

Bons estudos!