Vector X ArrayList

10 respostas
maresp

Qual a diferença entre utilizar Vector e utilizar ArrayList. Olhando a documentação são classes quase idênticas (as duas podem ser construídas a partir de collection). Quando utilizar uma ou outra?

10 Respostas

dreamspeaker

A própria documentação do ArrayList responde sua pergunta:

“This class is roughly equivalent to Vector, except that it is unsynchronized.”

Já li por aí que é interessante evitar o uso de Vector, que existem outras coleções melhores.

cv1

Vector é uma classe bem velhinha já, e seu uso em código novo não é recomendado, agora que temos as Collections. Use sempre List, e, caso voce precise de uma List sincronizada, faça o seguinte:

List syncList = Collections.synchronizedList(list);
A

Qual é a diferença entre Collection unsynchronized e synchronized???

louds

A diferença é simples, todo acesso a coleções sincronizadas é, hmm, sincronizado! É só pensar que todo metodo de colections synchronized são do tipo:

public synchronized  ... metodo(..) ...

Ou seja, são protegidas contra acesso simultaneo vindo de varias threads.

E isso não ocorre nas coleções unsynchronized, experimenta inserir no mesmo HashMap simultaneamente de umas 10 threads diferentes para ver oque acontece…

Paulo_Silveira

hoje em dia o pessoal fala pra voce suar o Vector sem se rpeocupar muito: a velocidade de se obter locks nas VMs modernas eh bem rapido. Dizem os mitos que antigamente a invocacao de um metodo sinc era 48x mais lenta… e hoje eh 2x. Bem, coisas de benchmark

mas eu nao gosto e Vector nao, tem uns metodos muito feios, tipo addElement, que vem das antigas.

Mas voce pode usar Vector como list. Sem problemas.

E legal eh que o Vector tem a Enumeration, que eh um iterator sem remove sincronizado no caso dele.

cv1

Literalmente TODA a funcionalidade das classes Vector, Hashtable e Enumeration foi implementada na API de Collections. Usar Vector/Hashtable/Enumeration hoje nao faz mais sentido :wink:

Ironlynx

Conclusão:
evite usar Vector/Hashtable/Enumeration(estão depreciadas) ,
utilize List/Map/Iterator

Se precisar utilizar threads (e sincronizar) utilize soluções como
a q o CV postou  acima.
Paulo_Silveira

“Ironlynx”:
Conclusão:
evite usar Vector/Hashtable/Enumeration(estão depreciadas) ,
utilize List/Map/Iterator

</blockquote>

sph um detalhe, eh bom lembrar que elas nao estao depreciadas, ok? soh estao em desuso. depreciadao eh bem mais grave.

louds

[sarcasmo]
Se estivessem depreciadas provavelmente nem funcionariam direito, como ocorre com um monte de métodos do AWT.
[/sarcasmo]

Ironlynx

:shock: Foi malz Paulo…errei feio!!!
Me antecipei a Sun!!!

Criado 7 de julho de 2003
Ultima resposta 12 de jul. de 2003
Respostas 10
Participantes 7