Estou estudando Collections e pintou uma dúvida, como faço para aumentar a capacidade de um objeto Vector.
Eu sei que ele é redimensionado para o dobro do tamanho quando seu tamanho passa sua capacidade, mas existe um método no qual eu possa indicar o incremento, sem utilizar do construtor sobrecarregado, no qual é permitido discriminar o tamanho do incremento, caso esse seja necessário :?:
Vector
6 Respostas
java.sun.com/j2se/1.4.2/docs/api/java/util/Vector.html
veja o construtor que recebe 2 inteiros, a capacidade inicial e o incremento.
E lembre-se que Vector é sincronizado, muitas vezes vc precisa de uma ArrayList, por exemplo.
peczenyj então eu tinha visto o construtor e até citei na minha pergunta a possibilidade de utilizá-lo, mas não achei nenhum método que pudesse alterar o atributo da classe Vector chamado capacityIncrement.
A única possibilidade é que você citou de utilizar o construtor então?
Até onde sei, a única maneira de ajustar o valor do capacityIncrement é através do construtor. Porém, se o seu projeto admitir uma mudança desse tipo, recomendaria usar as classes FastList e FastTable do projeto Javolution, cujas capacidades de armazenamento aumentam de maneira suave:
http://www.javolution.org/target/site/apidocs/javolution/util/FastList.html
http://www.javolution.org/
É bom fazer algum tipo de teste de performance. Nem sempre é rápido alterar o tamanho de uma collection pois vc precisa criar um novo array interno, copiar o mesmo, etc. De repente vc precisa de um conjunto de parâmetros que só testando vc vai chegar nos melhores valores para ter um consumo de memória adequado e uma boa performance.
Valeu galera, então não é nenhum projeto, estou estudando java collections ainda só queria esclarecer essa dúvida! Obrigado!
Só voltando a ressaltar, em 99.99% das vezes, você utilizará o ArrayList, não o Vector. O Vector é considerado pela própria Sun uma “legacy class”, ou seja, você não deveria utiliza-lo.
Mesmo no caso raríssimo caso de precisar de sincronização na lista é possível gerar um wrapper que sincroniza qualquer tipo de lista através do código:
List<SeuTipo> lista = Collections.synchronizedList(suaListaNaoSincronizada);