Conjunto obsoleto (java.util.vector)

11 respostas
J

Olá,

pessoal estou recebendo uma mensagem do NetBeans 6.9 ,

Versão do produto: NetBeans IDE 6.9 (Build 201007282301)
Java: 1.6.0_21; Java HotSpot™ 64-Bit Server VM 17.0-b17

,
que o a classe Vector é um conjunto obsoleto, mas ele nao me fala oq devo usar, estou com receio de usar a classe e depois nao rodar em máquinas virtuais mais novas, mais nao sei por qual classe trocar.

Grato.

11 Respostas

M

Não use Vector! Use List!

E

Troque java.util.Vector<> por java.util.ArrayList<>. Ou seja, onde você tinha algo como:

import java.util.Vector; 
...
Vector<String> v = new Vector<String>();
...

use:

import java.util.List;
import java.util.ArrayList;
...
List<String> v = new ArrayList<String>();
...
V

Use o ArrayList no lugar do Vector:

Por exemplo, para criar uma lista de String troque:

Vector lista = new Vector();

Por:

List&lt;String&gt; lista = new ArrayList&lt;String&gt;();

O Vector e o HashTable não são recomendados desde o Java 1.2, quando surgiu a Collections Framework, com o ArrayList e o HashMap.
Provavelmente você não terá problema em máquinas mais antigas.

Para ver mais exemplos, leia:
http://www.guj.com.br/posts/list/74068.java#389435

J

Legal, mais List eu tenho q “tipar”? o bom do Vector e qu nao preciso tipar e posso colocar varios tipos de dados nao teria algo parecdio?

E

Bom o cacete. A partir do Java 5, você também tem de tipar o java.util.Vector (senão provoca aquele famoso warning de “raw type”), e se você quiser pôr vários tipos de dados em um List, crie um List então, se é o que você quer.

Se quiser criar um List de vários objetos, todos derivados a partir de uma mesma classe, pode usar um List , por exemplo.

F

Claro que vc tem que tipar o vector, a não tipagem é uma má pratica.

para armazenar varios objetos distintos o minimo que deve ser feito é informar Object na tipagem, mesmo assim não é o ideal. Se vc usa um Vector para transportar um punhado de dados, e usar seus indices como referencia, considere usar um objeto seu para tal proprosito.

V

Na verdade, é 129371298372928172198379812732198372 de vezes melhor tipar sua lista.

Isso evita casts. Olha só, se você tem uma lista de Strings, sem tipar, você precisa fazer isso aqui:

String item = (String) lista.get(0);

Tipando você só faz:

String item = lista.get(0);

E quantas vezes você usa o get e faz esse cast, comparado com o tanto de vezes que você declara a lista?

Na hora de inserir dados, o sistema também te avisa um possível uso errado na hora da compilação:

lista.add(new Integer(10)); //Ops! Integer não é String.

É possível iterar sobre a lista facilmente:

for (String dado : lista) { System.out.println(dado); }

Existem outras vantagens.
O List não tem métodos duplicados que fazem a mesma coisa (add e addElement, por exemplo).
O List não tem sincronização, que geralmente é inútil e só consome performance.
Existe mais de um tipo de lista, além do ArrayList, você pode usar o LinkedList, e as listas do util.synchronized.
Você pode transformar listas em listas imodificáveis através do método Collections.unmodifiableList.

E

Se você quer usar um Vector de 2 posições, só para representar um par de coisas que você não tem a menor vontade de criar uma classe só para eles, em vez disso crie um Pair<T, U> de acordo com o que vou mostrar abaixo.

public class Pair<T, U> {
    public Pair() {}
    public Pair (T t, U u) { first = t; second = u; }
    public T first;
    public U second;
    public String toString() { return "(" + first.toString() + "," + second.toString() + ")"; }
}

Se quiser então criar um Pair<String, Double> (por exemplo):

Pair<String, Double> sd = new Pair<String, Double>("Café 3 Fígados", 12.40);
...
System.out.println (sd.first); // imprime "Café 3 Fígados"
System.out.println (sd.second); // imprime 12.4

No Java 7, teremos algo mais fácil de usar, que é o “operador losango” (diamond operator). Nesse caso, teríamos:

Pair<String, Double> sd = new Pair<>("Café 3 Fígados", 12.40);
...
System.out.println (sd.first); // imprime "Café 3 Fígados"
System.out.println (sd.second); // imprime 12.4

Nesse caso em particular, não preciso repetir os tipos.

J

Claro que vc tem que tipar o vector, a não tipagem é uma má pratica.

para armazenar varios objetos distintos o minimo que deve ser feito é informar Object na tipagem, mesmo assim não é o ideal. Se vc usa um Vector para transportar um punhado de dados, e usar seus indices como referencia, considere usar um objeto seu para tal proprosito.

eu crio o vector e uso assim

Vector vector = new Vector();
vector.addElement("qualquercoisa");
vector.ElementAt(0);
V

JJjava:

Vector vector = new Vector(); vector.addElement("qualquercoisa"); String coisa = (String) vector.ElementAt(0);

Com o ArrayList fica assim:

List<String> list = new ArrayList<String>(); list.add("qualquercoisa"); String coisa = list.get(0);

Note que você é obrigado a fazer cast quando usa o ElementAt, mas não precisa do cast ao usar o get.

W

JJjava:
eu crio o vector e uso assim Vector vector = new Vector(); vector.addElement("qualquercoisa"); vector.ElementAt(0);

Se você quiser, os ArrayLists também podem ser utilizados assim. Lembrando que, não tipar é uma má prática

Criado 30 de agosto de 2010
Ultima resposta 30 de ago. de 2010
Respostas 11
Participantes 6