HashMap vs. HashTable

7 respostas
A

sempre uso HashMap qdo. não estou usando Threads? Fiz um teste parece que funciona se eu trocar minha estrutura com HashMap para HashTable…

7 Respostas

robsonsm

http://www.guj.com.br/posts/list/53030.java

lina

Oi,

Não entendi. HashMap e HashTable são “tipos” diferentes.

De uma olhada em seu significa na API!

Tchauzin!

A

valeu mesmo… ótimo post… tão lá tb os feras Vini e Thingol…

ViniGodoy

Via de regra, vc vai usar HashTable e Vector só se as classes HashMap e ArrayList não existirem:

  1. Em Java ME;
  2. Em java inferior ao 1.2;

Para todo resto, use o HashTable e o HashMap. As situações que vc vai precisar da sincronização da coleção em si é tão rara, mas tão rara, que geralmente não é motivo de preocupação (e, se for, você terá que estudar threads bem à fundo, ao ponto de não ter mais dúvida de onde usar).

E

E nesse caso você não usaria o Hashtable porque ele sincroniza as operações nos “lugares errados”, baixando muito o desempenho de sua aplicação multithread. Nesses casos, você usaria o ConcurrentHashMap ( http://download-llnw.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentHashMap.html ) ou para mais desempenho ainda, o NonBlockingHashMap de Cliff Click ( http://www.azulsystems.com/events/javaone_2007/2007_LockFreeHash.pdf , http://sourceforge.net/projects/high-scale-lib/ ).

tnaires

Poderíamos usar também o método Collections.synchronizedMap(), correto?

T

Collections.synchronizedMap encapsula seu Map em outro objeto que simplesmente põe um “synchronized” em cada acesso a esse mapa. É algo ingênuo e muito geral.
Isso tem mais ou menos o mesmo defeito da antiga classe Hashtable: ela simplesmente garante que a estrutura do Map não é corrompida por acesso multithread, mas não garante que seja eficiente acessar esse mapa por várias threads.
Se vocês olharem o pacote java.util.concurrent ( http://download-llnw.oracle.com/javase/6/docs/api/java/util/concurrent/package-summary.html ) , irão ver que há duas classes bem diferentes para o acesso concorrente a um Map: ConcurrentHashMap (que é o HashMap “turbinado”) e ConcurrentSkipListMap (que é uma classe análoga a TreeMap, no sentido em que conserva os elementos ordenados, mas que funciona internamente de forma bem diferente. )

Criado 21 de setembro de 2010
Ultima resposta 21 de set. de 2010
Respostas 7
Participantes 7