Pergunta

O que é a classe java.util.Vector?

Resposta

A classe java.util.Vector oferece a implementação de um array de objetos. Como um array, o Vector pode ser criado com um tamanho inicial (denominado capacity=capacidade) sendo que cada um de seus elementos é acessado através de um índice inteiro. Mas diferentemente do arrays comuns, o tamanho de um Vector (sua capacity) pode aumentar automaticamente para acomodar a inclusão ou explicitamente diminuído para otimizar a remoção de elementos conferindo-lhe grande versatilidade.

Para aumentar a flexibilidade de seu uso a classe Vector armazena somente objetos genéricos do tipo Object. Como todo e qualquer objeto Java é derivado, direta ou indiretamente, da classe Object, então qualquer tipo de objeto pode ser armazenado num Vector. Por outro lado não é possível armazenar-se diretamente tipo primitivos tais como int, float ou char, sendo necessário recorrermos as classes wrapper Integer, Float etc (veja JavaFaq 0104).

Abaixo temos alguns construtores e métodos importantes desta classe:

Método Descrição
Vector() Constroi um Vector vazio.
Vector(int) Constroi um Vector com a capacidade indicada.
addElement(Object) Adiciona o elemento dado ao Vector.
capacity() Retorna a capacidade do vetor.
elementAt(int) Retorna o elemento armazenado na posição indicada.
insertElementAt(Object,int) Insere o elemento dado na posição indicada.
isEmpty() Testa se o Vector está vazio.
removeAllElements() Remove todos os elementos do Vector e ajusta seu tamanho para zero.
removeElementAt(int) Remove o elemento existente na posição indicada.
setElementAt(Object, int) Troca o elemento existente na posição indicada pelo elemento dado.
setSize(int) Determina a capacidade do Vector.
size() Retorna a quantidade de elementos armazenadas no Vector.
trimToSize() Ajusta a capacidade para a quantidade de elementos armazenada.

Para criarmos um novo Vector de tamanho 10 podemos escrever:

Vector v = new Vector(10);

A adição de elementos é feita com o método addElement que tem como argumento o objeto a ser adicionado ao Vector:

v.addElement(objeto);

O acesso aos elementos pode ser feito com o método elementAt que tem como argumento o índice do elemento a ser utilizado. Caso seja especificado um valor inválido como índice, tal como nos arrays, é lançada a exceção ArrayIndexOutOfBoundsException (veja JavaFaq 0056). Note que os elementos retornado por este método são do tipo Object, necessitando um operação de casting para sua correta utilização:

objeto = (tipoObjeto) v.elementAt(posicao);

A seguir um exemplo onde é criado um Vector de 10 posições no qual são inseridos 20 valores reais double, os quais são posteriormente lidos e impressos:

import java.util.Vector;

public class ExemploVector {

  public static void main(String args[]) {
    System.out.println("Criando Vector com tamanho 10");
    Vector v = new Vector(10);
    for (int i=0; i<20; i++) {
      System.out.println("Adicionando elemento " + i);
      v.addElement(new Double(i/3*i));
    }
    for (int i=0; i<20; i++) {
      System.out.println("Consultando elemento " + i);
      Double elemento = (Double)v.elementAt(i);
      System.out.println("  valor = " + elemento.doubleValue());
    }
  }
}

Embora extremamente versátil, a classe Vector impõe um overhead significativo quando comparada a arrays comuns, não justificando o seu uso em aplicações onde o tamanho do array poderia ser estimado mesmo que com desperdício. (Veja o uso de arrays no JavaFaq 0062)