Além do fato de HashSet
não permitir valores duplicados, qual é a diferença entre HashMap
e HashSet
?
Quero dizer implementação sábio? É um pouco vago, porque ambos usam tabelas de hash para armazenar valores.
Além do fato de HashSet
não permitir valores duplicados, qual é a diferença entre HashMap
e HashSet
?
Quero dizer implementação sábio? É um pouco vago, porque ambos usam tabelas de hash para armazenar valores.
Respostas:
Eles são construções completamente diferentes. A HashMap
é uma implementação de Map
. Um mapa mapeia chaves para valores. A pesquisa de chave ocorre usando o hash.
Por outro lado, a HashSet
é uma implementação de Set
. Um conjunto é projetado para corresponder ao modelo matemático de um conjunto. A HashSet
usa a HashMap
para respaldar sua implementação, como você observou. No entanto, implementa uma interface totalmente diferente.
Quando você está procurando o que será melhor Collection
para seus objetivos, este Tutorial é um bom ponto de partida. Se você realmente quer saber o que está acontecendo, há um livro para isso também.
HashSet é um conjunto , por exemplo, {1,2,3,4,5}
O HashMap é um mapa de chave -> valor (chave para valor), por exemplo, {a -> 1, b -> 2, c -> 2, d -> 1}
Observe no meu exemplo acima que no HashMap não deve haver chaves duplicadas, mas pode ter valores duplicados.
No HashSet, não deve haver elementos duplicados.
O HashSet não é sincronizado, o que significa que eles não são adequados para operações seguras para threads, a menos que sejam sincronizados explicitamente.
add contains next notes
HashSet O(1) O(1) O(h/n) h is the table
O HashMap não é sincronizado, o que significa que eles não são adequados para operações com segurança de thread até que sejam sincronizados explicitamente. [Similaridade]
get containsKey next Notes
HashMap O(1) O(1) O(h/n) h is the table
Consulte este artigo para encontrar mais informações.
É realmente uma pena que os nomes deles comecem com Hash . Essa é a parte menos importante deles. As partes importantes vêm depois do Hash - o Conjunto e o Mapa , como outros já apontaram. O que são, respectivamente, são um conjunto - uma coleção não ordenada - e um mapa - uma coleção com acesso por chave. Eles são implementados com hashes - é daí que os nomes vêm - mas sua essência está oculta por trás dessa parte de seus nomes.
Não se confunda com os nomes deles; eles são coisas profundamente diferentes.
O Hashset
Internamente implementa HashMap
. Se você vir a implementação interna, os valores inseridos no HashSet são armazenados como chaves no HashMap e o valor é um objeto Dummy da classe Object.
A diferença entre HashMap e HashSet é: -
HashMap
contém pares de valores-chave e cada valor pode ser acessado por chave, onde o HashSet precisa ser iterado sempre que não houver método get.HashMap
implementa a interface Map e permite um valor nulo como chave e vários valores nulos como valores. Onde HashSet
implementa a interface Set, permite apenas um valor nulo e nenhum valor duplicado. (Lembre-se de que uma chave nula é permitida na chave HashMap, portanto, um valor nulo no HashSet como o HashSet implementa o HashMap internamente). HashSet
e HashMap
não mantém a ordem de inserção durante a iteração.Como os nomes sugerem, um HashMap é um mapa associativo (mapeamento de uma chave para um valor), um HashSet é apenas um conjunto .
Diferenças entre HashSet e HashMap em Java
1) A primeira e mais significativa diferença entre o HashMap e o HashSet é que o HashMap é uma implementação da interface Map, enquanto o HashSet é uma implementação da interface Set, o que significa que o HashMap é uma estrutura de dados baseada em valores-chave e o HashSet garante a exclusividade ao não permitir duplicados. O HashSet é um invólucro do HashMap em Java. Se você observar o método add (E e) do HashSet.java, verá o seguinte código:
public boolean add(E e)
{
return map.put(e, PRESENT)==null;
}
onde colocar Objeto no mapa como chave e valor é um objeto final PRESENT que é fictício.
2) A segunda diferença entre o HashMap e o HashSet é que, usamos o método add () para colocar elementos em Set, mas usamos o método put () para inserir chave e valor no HashMap em Java.
3) O HashSet permite apenas uma chave nula, mas o HashMap pode permitir uma chave nula + vários valores nulos.
Isso é tudo sobre a diferença entre HashSet e HashMap em Java. Em resumo, HashSet e HashMap são dois tipos diferentes de coleção, sendo um definido e outro sendo mapa.
Diferenças entre HashSet e HashMap em Java
O HashSet usa internamente o HashMap para armazenar objetos. Quando o método add (String) chamado chama método HahsMap put (key, value) em que key = String object & value = new Object (Dummy). Para que ele não mantenha duplicatas porque as chaves nada mais são do que Value Objeto.
os objetos armazenados como chave no Hashset / HashMap devem substituir o código de hash e o contrato igual.
As chaves usadas para acessar / armazenar objetos de valor no HashMap devem ser declaradas como Final porque, quando modificado, o objeto Valor não pode ser localizado e retorna nulo.
A HashMap
é adicionar, obter, remover, ... objetos indexados por uma chave personalizada de qualquer tipo.
A HashSet
é adicionar elementos, remover elementos e verificar se há elementos comparando seus hashes.
Portanto, um HashMap contém os elementos e um HashSet lembra seus hashes.
equals()
métodos.
Diferenças: em relação à hierarquia: HashSet implementa Set. O HashMap implementa o Map e armazena um mapeamento de chaves e valores.
Um uso do HashSet e HashMap em relação ao banco de dados ajudaria você a entender o significado de cada um.
HashSet: geralmente é usado para armazenar objetos de coleção exclusivos. Por exemplo: pode ser usado como classe de implementação para armazenar a relação de muitos para um entre o
item da classe e o lance de classe, onde (o item possui muitos lances)
HashMap: é usado para mapear uma chave para o valor. O valor pode ser nulo ou qualquer objeto / list of Object (que é objeto em si).
Um HashSet é implementado em termos de um HashMap . É um mapeamento entre a chave e um objeto PRESENT.
Um HashSet usa um HashMap internamente para armazenar suas entradas. Cada entrada no HashMap interno é codificada por um único Objeto, para que todas as entradas sejam hash no mesmo bucket. Não me lembro do que o HashMap interno usa para armazenar seus valores, mas isso realmente não importa, pois esse contêiner interno nunca conterá valores duplicados.
EDIT : Para abordar o comentário de Matthew, ele está certo; Eu tive isso ao contrário. O HashMap interno é digitado com os Objetos que compõem os elementos Set . Os valores do HashMap são um Objeto simplesmente armazenado nos depósitos do HashMap.
HashMap
é uma Map
implementação, permitindo valores duplicados, mas não chaves duplicadas. . Para adicionar um objeto, é necessário um par Chave / Valor. Chaves nulas e valores nulos são permitidos. por exemplo:
{O-> 3, mundo-> 5, é-> 2, legal-> 4}
HashSet
é uma Set
implementação que não permite duplicatas . Se você tentou adicionar um objeto duplicado, uma chamada ao public boolean add(Object o)
método, o conjunto permanece inalterado e retorna false
. por exemplo:
[O mundo é legal]
você praticamente respondeu sua própria pergunta - o hashset não permite valores duplicados. seria trivial criar um hashset usando um hashmap de backup (e apenas uma verificação para ver se o valor já existe). Eu acho que as várias implementações java fazem isso ou implementam algum código personalizado para fazê-lo de forma mais eficiente.
java.util.HashSet
diz que é apoiado por um java.util.HashMap
.
Basicamente, no HashMap, o usuário precisa fornecer a Chave e o Valor, enquanto no HashSet você fornece apenas o Valor, a Chave é derivada automaticamente do Valor, usando a função hash. Portanto, depois de ter chave e valor, o HashSet pode ser armazenado como HashMap internamente.
HashSet e HashMap ambos os pares de lojas, a diferença está no HashMap que você pode especificar uma chave enquanto no HashSet a chave vem do código hash do objeto
HashMaps
permita uma chave nula e valores nulos. Eles não são sincronizados, o que aumenta a eficiência. Se necessário, você pode sincronizá-los usandoCollections.SynchronizedMap()
Hashtables
não permitem chaves nulas e são sincronizadas.
HashMap é uma implementação da interface do Mapa HashSet é uma implementação da Interface do Conjunto
HashMap Armazena dados em forma de par de valores-chave HashSet Armazena apenas objetos
O método Put é usado para adicionar elemento no mapa. O método Put é usado para adicionar elemento.
No mapa de hash, o valor do código de hash é calculado usando o objeto-chave Aqui, o objeto membro é usado para calcular o valor do código de hash, que pode ser o mesmo para dois objetos, para que o método equal () seja usado para verificar a igualdade se retornar false, o que significa que dois objetos são diferentes.
O HashMap é mais rápido que o hashset porque a chave exclusiva é usada para acessar o objeto HashSet é mais lenta que o Hashmap