TrimToSize Vector

Ola pessoal, alguém sabe para que serve o método TrimToSize aplicado em um Vector?

Obrigado!

Para entender esse método você deve saber de que forma o vector é implementado.

O Vector é uma abstração de uma estrutura de dados dinâmica, que utiliza um array “por debaixo dos panos”. O que acontence é que esse array por vezes tem um tamanho maior do que o que está sendo usado. Porém isso fica transparente para quem usa essa classe. Para evitar perda de recursos, mais especificamente memória, você pode utilizar o método trimToSize(), que redimensionará o array para o tamanho que está sendo utilizado.

Supondo que o array do vector esteja com tamnho 20, e você só tenha adicionado 10 elmentos, esse array estará ocupando uma memória desnecessária, por isso você pode chamar tal método.

Vale lembrar que com isso você provavelmente irá ter uma perda de performace, tendo em vista que ao adicionar um novo elemento ele terá que instanciar um novo array maior, e copiar elemento à elemento para o novo array e depois descartar o antigo. A implmentação de uma array maior do que o que se usa, foi pensanda para evitar esse tipo de overhead. É um caso a se pensar ao usar o método trimToSize().

Obrigado dinovo, tava pensando algo bem diferente…

Boa noite!!!

Na verdade, costuma-se chamar este método depois que vc já adicionou oq tinha que adicionar no Vector…Como assim?

Bem, suponha um método que lê um arquivo, linha a linha e as armazena (Strings) em um Vector…Ou seja, para cada linha lida, chama-se o método add e adiciona-se a linha ao vetor…
Qdo acaba-se de ler o arquivo, deseja-se retornar tal Vector…Todavia, este Vector está disperdiçando memória, pq internamente, ele tem várias posições alocadas no array que não estão sendo usadas. E como vc não vai adicionar mais nada nesse Vector, é prudente e desejável que se ajuste o array interno dele para o número de elementos que ele realmente guarda…

PS:Parece que cada vez que vai estourar o buffer interno, o incremento de posições do array interno é recalculado através de uma fórmula que estima quanto seria mais interessante a ser incrementado.

Só um detalhe, se possível use ArrayList ao invés de Vector.

Existem várias vantagens em fazer isso:

  1. Não é sincronizado, assim, pode haver um ganho de performance;
  2. O ArrayList implementa a Collections Framework desde que foi criado, assim, não existem métodos duplicados como add e addElement;
  3. É o que a Sun recomenda.

Para usar um ArrayList ao invés de:

Vector<String> suaLista = new Vector<String>();

Faça:

List<String> suaLista = new ArrayList<String>();

O uso é muito similar:

[code]suaLista.add(“Vinicius”);
suaLista.add(“Godoy”);
suaLista.add(“De”);
suaLista.add(“Mendonça”);
for (String s : suaLista) {
System.out.print(s + " ");
}

System.out.println(“Tamanho do list:” + suaLista.size());
suaLista.remove(“Vinicius”);

Collections.sort(suaLista);

System.out.println("Nome ordenado: " + suaLista.toString());[/code]

Aproveitando o assunto, uma dúvida: existe alguma diferença de desenpenho ou algo que o valha, se eu declarar:

ArrayList array = new ArrayList();

ao invés de:

List array = new ArrayList();

:?: :?: :?:

[ ]

De desempenho, não. Mas é sempre preferível vincular o seu código ao comportamento de uma lista (interface List), não a uma implementação (ArrayList, LinkedList, etc).

Dá uma lida neste tópico que tem exemplos que podem te ajudar a entender melhor.

valeu!

[ ]