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.
java
collections
hashmap
hashset
SpikETidE
fonte
fonte
Respostas:
Eles são construções completamente diferentes. A
HashMap
é uma implementação deMap
. Um mapa mapeia chaves para valores. A pesquisa de chave ocorre usando o hash.Por outro lado, a
HashSet
é uma implementação deSet
. Um conjunto é projetado para corresponder ao modelo matemático de um conjunto. AHashSet
usa aHashMap
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.fonte
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.
fonte
HashSet
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.
HashMap
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]
Consulte este artigo para encontrar mais informações.
fonte
É 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.
fonte
O
Hashset
Internamente implementaHashMap
. 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. OndeHashSet
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
eHashMap
não mantém a ordem de inserção durante a iteração.fonte
O HashSet nos permite armazenar objetos no conjunto, como o HashMap nos permite armazenar objetos com base na chave e no valor. Todo objeto ou objeto armazenado terá chave.
fonte
Como os nomes sugerem, um HashMap é um mapa associativo (mapeamento de uma chave para um valor), um HashSet é apenas um conjunto .
fonte
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:
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.
fonte
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.
fonte
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.
fonte
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).
fonte
Um HashSet é implementado em termos de um HashMap . É um mapeamento entre a chave e um objeto PRESENT.
fonte
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.
fonte
HashMap
é umaMap
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:HashSet
é umaSet
implementação que não permite duplicatas . Se você tentou adicionar um objeto duplicado, uma chamada aopublic boolean add(Object o)
método, o conjunto permanece inalterado e retornafalse
. por exemplo:fonte
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.
fonte
java.util.HashSet
diz que é apoiado por umjava.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.
fonte
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
fonte
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.fonte
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
fonte