Não sei o que o povo tem que gosta tanto desse Vector.
Vector é uma classe antiga, criada nas primeiras versões do Java.
Seu uso, juntamente com o da classe HashTable, não é recomendado desde a criação da Collections Framework, no Java 1.2. No lugar, deve-se usar o ArrayList (e no caso do HashTable, usa-se HashMap no lugar).
As razões para isso são várias:
-
O Vector tem sincronização tem todos os métodos, o que representa um despercídio de recursos e um possível código mais lento (embora eu não usaria a lentidão como um argumento na maior parte dos casos, pq ela não é representativa);
-
O Vector tem a interface inxada, pois suporta tanto métodos antigos quanto os novos, implementados de List. Por exemplo, o ideal é usar add da interface List, e não o addElement, existente só em Vector - ambos os métodos fazem a mesma coisa.
Usar métodos não padrão de list tornam o código mais difícil de manter;
-
Não é recomendado pela Sun;
Explicando o item #2 em mais detalhes, não se recomenda usar nenhum coleção diretamente, e sim através de uma interface. Isso permite a adaptação da coleção com wrappers de sincronização e imutabilidade, além da troca de um algoritmo de coleção por outra, caso necessário. Um exemplo do uso pela interface seria:
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 10; i++) {
list.add(new Integer(i));
}
Note que a variável é do tipo List, não ArrayList. Isso me permite fazer coisas interessantes como:
List<Integer> listReadOnly = Collections.unmodifiableList(v);
List<Integer> listSynchronized = Collections.synchronizedList(v);
listSynchronized.add(10); //Adiciona 10 em list de maneira sincronizada
listReadOnly.remove(0); //Erro! UnsupportedOperationException!
Ou mesmo, eu poderia trocar a declaração no futuro por:
List<Integer> list = new LinkedList<Integer>(); //Outra lista, mesmo código para usar
for (int i = 0; i < 10; i++) {
list.add(new Integer(i));
}
Sem que isso afetasse o meu código inteiro. Tem mais um exemplo disso nesse tópico: http://www.guj.com.br/posts/list/55387.java#290673