A diferença entre hashmap e hashtable é frequentemente perguntada por outras pessoas. Vou resumir aqui hoje.
(I) A história da herança é diferente
Hashtable de classe pública Extende implementos de dicionário Mappublic Classe Hashmap estende o mapa de implementos abstratos
A hashtable é herdada da classe de dicionário e o hashmap é uma implementação da interface do mapa introduzida pelo Java 1.2.
(Ii) Segurança diferente
O hashmap não é sincronizado e a hashtable é sincronizada por padrão, o que significa que a hashtable é segura por threads e vários threads podem compartilhar uma hashtable; E se não houver sincronização correta, vários threads não podem compartilhar hashmap. O Java 5 posteriormente fornece concorrentes, que substitui a hashtable e tem melhor escalabilidade do que a hashtable. Claro, podemos sincronizar o hashmap por:
Mapa m = coleções.synchronizemap (hashmap);
(Iii) é o mesmo ou semelhante em valores nulos possíveis
O hashmap permite que você use valores nulos como chave ou valor para uma entrada de tabela. Existe apenas um registro em um hashmap que pode ser uma chave vazia, mas qualquer número de entradas pode ser um valor vazio. Ou seja, se nenhuma chave de pesquisa for encontrada na tabela, ou se a chave de pesquisa for encontrada, mas é um valor vazio, get () retornará nulo; Embora a hashtable não funcione, nem a chave nem o valor permitem valores nulos.
(Iv) as implementações internas dos dois métodos de travessia são diferentes
Hashtable e Hashmap usam o iterador do iterador. O iterador do Hashmap é um iterador de falha, enquanto o iteador enumerador da hashtable não é um Fail-Fast. Por razões históricas, a hashtable também usa o método de enumeração.
(V) diferentes usos dos valores de hash
A hashtable usa diretamente o código de hash do objeto, enquanto o hashmap precisa recalcular o valor do hash.
(Vi) O tamanho e o método de expansão inicial da matriz de métodos de implementação interna são diferentes.
O tamanho padrão da matriz de hash na hashtable é 11, e o método de aumento é antigo*2+1; O tamanho padrão da matriz de hash no hashmap é 16 e deve ser um expoente de 2.
Obrigado pela leitura, espero que isso possa ajudá -lo. Obrigado pelo seu apoio a este site!