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!

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
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!