Dúvida com ArrayList e indices nulos  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
hlegius
JavaChild
[Avatar]

Membro desde: 07/05/2006 14:29:25
Mensagens: 126
Localização: Guarulhos, SP
Offline

Olá !
Sempre que estou debugando alguma coisa me deparo com uma coisa um tanto estranha nos ArrayList's.

Tenho lá:



Na sessão de debugging ele me aparece conforme imagem anexada. (meu foobaz presente e um monte de indices nulos)

A única explicação que eu teria para isto é: ele cria uma certa quantidade de índices na sua inicialização.
Alguém tem alguma ideia ?


Abraços !

[Thumb - brisa.PNG]
 Nome do arquivo brisa.PNG [Disk] Download
 Descrição ArrayList e indices nulos
 Tamanho 13 Kbytes
 Baixado:  36 vez(es)


http://programe.me
Zend Certified Engineer
ArchLinux - A simple lightweight Linux Distribution
[WWW] [MSN] [ICQ]
Vini Fernandes
Virtual Machine Man
[Avatar]

Membro desde: 20/01/2009 08:43:02
Mensagens: 523
Offline

Sempre que fazemos



instanciamos uma lista com capacidade inicial de 10 objetos.

T+

What do you know about Java? Help me!
[MSN]
hlegius
JavaChild
[Avatar]

Membro desde: 07/05/2006 14:29:25
Mensagens: 126
Localização: Guarulhos, SP
Offline

Huum !
Foi o que eu imaginei mesmo !

Depois que ele preenche os 10 itens, ele aumenta de forma aleatória o vetor oO

Fiz o teste:

1. Iniciou com 10 indices
2. Acabando-se os espaços e chamando o add() novamente, ele criou mais 6 indices
3. Acabando esses novos 6 e chamando o add() novamente, ele criou mais 9 indices
4. Acabando esses novos 9 e chamando o add() novamente, ele criou mais 13 indices
5. Acabando esses novos 13 e chamando o add() novamente, ele criou mais 20 indices.
6. Acabando esses novos 20 e chamando o add() novamente, ele criou mais 30 indices.

Engraçado que aparentemente não há uma regra de calculo para incremento. Interessante o funcionamento

http://programe.me
Zend Certified Engineer
ArchLinux - A simple lightweight Linux Distribution
[WWW] [MSN] [ICQ]
Ssalgado
JavaTeenager

Membro desde: 11/04/2005 12:51:05
Mensagens: 199
Offline

hlegius wrote:Huum !
Foi o que eu imaginei mesmo !

Depois que ele preenche os 10 itens, ele aumenta de forma aleatória o vetor oO

Fiz o teste:

1. Iniciou com 10 indices
2. Acabando-se os espaços e chamando o add() novamente, ele criou mais 6 indices
3. Acabando esses novos 6 e chamando o add() novamente, ele criou mais 9 indices
4. Acabando esses novos 9 e chamando o add() novamente, ele criou mais 13 indices
5. Acabando esses novos 13 e chamando o add() novamente, ele criou mais 20 indices.
6. Acabando esses novos 20 e chamando o add() novamente, ele criou mais 30 indices.

Engraçado que aparentemente não há uma regra de calculo para incremento. Interessante o funcionamento


Como o código é aberto, você é livre para ver como a implementacao funciona.

O método add, do Array list é mostrado abaixo:


Dá pra ver que o método ensureCapacity é responsável por assegurar que o array vai suportar o novo elemento.

Dando uma olhada no método ensureCapacity:


Ou seja, a nova capacidade é 3/2 mais 1 da anterior. Default é 10, então temos:

1. Iniciou com 10 indices
2. Acabando-se os espaços e chamando o add() novamente, ele criou mais 6 indices (16 = 10*(3/2) + 1)
3. Acabando esses novos 6 e chamando o add() novamente, ele criou mais 9 indices (25 = 16*(3/2) + 1)
4. Acabando esses novos 9 e chamando o add() novamente, ele criou mais 13 indices ....
5. Acabando esses novos 13 e chamando o add() novamente, ele criou mais 20 indices. ....
6. Acabando esses novos 20 e chamando o add() novamente, ele criou mais 30 indices. ...







 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team