Diferencia entre HashSet y HashMap?


Aparte del hecho de que HashSet no permite valores duplicados, ¿cuál es la diferencia entre HashMap y Hashset?

Me refiero a la implementación sabia? Es un poco vago porque ambos usan tablas hash para almacenar valores.

Author: nbro, 2010-05-05

21 answers

Son construcciones completamente diferentes. A HashMap es una implementación de Map. A Map mapea claves a valores. La búsqueda de claves se produce usando el hash.

Por otro lado, a HashSet es una implementación de Set. Un Conjunto está diseñado para coincidir con el modelo matemático de un conjunto. A HashSet utiliza a HashMap para respaldar su implementación, como usted señaló. Sin embargo, implementa una interfaz completamente diferente.

Cuando usted está buscando lo que será el mejor Collection para tus propósitos, este Tutorial es un buen punto de partida. Si realmente quieres saber lo que está pasando, hay un libro para eso, también.

 123
Author: justkt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-18 13:09:06

El HashSet es un set, p.ej. {1,2,3,4,5}

HashMap es un mapa clave -> valor (clave a valor), por ejemplo, {a - > 1, b - > 2, c - > 2, d -> 1}

Observe en mi ejemplo anterior que en el HashMap no debe haber claves duplicadas, pero puede tener valores duplicados.

En el HashSet, no debe haber elementos duplicados.

 273
Author: b.roth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-05 14:00:39

HashSet

  1. La clase HashSet implementa la interfaz Set
  2. En HashSet, almacenamos objetos (elementos o valores) por ejemplo, si tenemos un HashSet de elementos de cadena, entonces podría representar un conjunto de elementos HashSet: {"Hello", "Hi", "Bye", "Run"}
  3. El HashSet no permite elementos duplicados que no se pueden almacenar valores duplicados en el HashSet.
  4. El HashSet permite tener un solo valor null.
  5. El HashSet no está sincronizado, lo que significa que no lo están adecuado para operaciones seguras de subprocesos hasta que no se sincronice explícitamente.[semejanza]

                          add      contains next     notes
    HashSet               O(1)     O(1)     O(h/n)   h is the table 
    

HashMap

  1. La clase HashMap implementa la interfaz de mapa
  2. HashMap es se utiliza para almacenar pares de clave y valor. En resumen, mantiene la mapeo de clave y valor (La clase HashMap es aproximadamente equivalente a Hashtable, excepto que no está sincronizado y permite nulls.) Este es cómo podría representar elementos de HashMap si tiene clave entera y valor del tipo de cadena: por ejemplo, {1 - > "Hola", 2 - > "Hola", 3 - > " Adiós", 4 - > "Run"}
  3. HashMap no permite claves duplicadas sin embargo permite tener valores duplicados.
  4. HashMap permite una sola clave null y cualquier número de valores null.
  5. HashMap no está sincronizado, lo que significa que no son adecuados para operaciones seguras para subprocesos hasta que no se sincronicen explícitamente.[semejanza]

                           get      containsKey next     Notes
     HashMap               O(1)     O(1)        O(h/n)   h is the table 
    

Por favor, consulte este artículo para encontrar más información.

 42
Author: Avanish Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-21 10:32:37

Es realmente una pena que ambos nombres comiencen con Hash. Esa es la parte menos importante de ellos. Las partes importantes vienen después del Hash - el Set y Map, como otros han señalado. Lo que son, respectivamente, son un Set - una colección desordenada - y un Map - una colección con llave de acceso. Sucede que se implementan con hashes, de ahí es de donde vienen los nombres, pero su esencia se esconde detrás de esa parte de sus nombres.

No se confundan con sus nombres; son cosas profundamente diferentes.

 32
Author: Carl Manaster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-05 18:30:18

HashSet nos permite almacenar objetos en el conjunto donde as HashMap nos permite almacenar objetos sobre la base de clave y valor. Cada objeto u objeto almacenado tendrá clave.

 3
Author: Spidfire,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-05 13:59:57

Como los nombres implican, un HashMap es un asociativo Map (mapeo de una clave a un valor), un HashSet es solo un Set.

 2
Author: leonbloy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-05 14:00:00

1) La primera y más significativa diferencia entre HashMap y HashSet es que HashMap es una implementación de la interfaz de mapa, mientras que HashSet es una implementación de la interfaz de Conjunto, lo que significa que HashMap es una estructura de datos basada en valores clave y HashSet garantiza la unicidad al no permitir duplicates.In reality HashSet es una envoltura alrededor de HashMap en Java, si nos fijamos en el código del método add(E e) de HashSet.java verá el siguiente código:

public boolean add(E e) {
  return map.put(e, PRESENT)==null;
}

Donde está poniendo el objeto en el mapa como clave y valor es un objeto final PRESENTE que es ficticio.

2) La segunda diferencia entre HashMap y HashSet es que , usamos el método add() para poner elementos en Set pero usamos el método put() para insertar clave y valor en HashMap en Java.

3) HashSet permite solo una clave nula, pero HashMap puede permitir una clave nula + múltiples valores nulos.

Eso es todo en la diferencia entre HashSet y HashMap en Java. En resumen HashSet y HashMap son dos tipos diferentes de Colección uno y otro Mapa.

 2
Author: Piqué,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-16 23:28:26

A HashMap es agregar, obtener, eliminar,... objetos indexados por una clave personalizada de cualquier tipo.
A HashSet es añadir elementos, eliminar elementos y comprobar si los elementos están presentes comparando sus hashes.

Así que un HashMap contiene los elementos y un HashSet recuerda sus hashes.

 1
Author: Martijn Courteaux,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-05 14:04:21

Diferencias: con respecto a la herencia: HashSet implementa Set. HashMap implementa Map y almacena una asignación de claves y valores.

Un uso de HashSet y HashMap con respecto a la base de datos le ayudaría a entender el significado de cada uno.
HashSet: se usa generalmente para almacenar objetos de colección únicos. Por ejemplo: Podría ser utilizado como clase de implementación para almacenar relación muchos a uno entre
artículo de clase y Oferta de Clase donde (Artículo tiene muchos Bids) HashMap: se usa para asignar una clave a un valor.el valor puede ser null o cualquier Objeto / lista de Objetos (que es objeto en sí mismo).

 1
Author: frictionlesspulley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-05 18:22:37

Diferencias entre HashSet y HashMap en Java

HashSet utiliza internamente HashMap para almacenar objetos.cuando el método add(String) lo llama llama al método HahsMap put(key,value) donde key=String object & value=new Object (Dummy).Por lo tanto, no mantiene duplicados porque las claves no son más que Objetos de Valor.

Los objetos que se almacenan como clave en Hashset/HashMap deben anular hashcode & equals contract.

Claves que se utilizan para acceder / almacenar objetos de valor en HashMap debe declararse como Final porque cuando se modifica el valor del objeto no se puede localizar y devuelve null.

 1
Author: user3539704,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-16 05:14:36

El Hashset implementa internamente HashMap. Si ve la implementación interna el http://javaconceptoftheday.com/how-hashset-works-internally-in-java / los valores insertados en el HashSet se almacenan como claves en el HashMap y el valor es un objeto ficticio de la clase Object. La diferencia entre HashMap vs HashSet es:- 1. HashMap contiene pares de valores clave y cada valor se puede acceder por clave donde como HashSet necesita ser iterado cada vez que no hay método get. 2. HashSet implementa la interfaz de mapa y permite un valor nulo como clave y varios valores nulos como valores.Donde como HashSet implementa la interfaz Set, solo permite un valor nulo y no valores duplicados.(Recuerde que se permite una clave nula en la clave de HashMap, por lo tanto, un valor nulo en el HashSet como HashMap implementaciones de HashMap internamente). 3.HashSet y HashMap no mantienen el orden de inserción mientras se itera.

 1
Author: Abhay S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-11 05:25:04

Un HashSet usa un HashMap internamente para almacenar sus entradas. Cada entrada en el HashMap interno está codificada por un solo objeto, por lo que todas las entradas hash en el mismo cubo. No recuerdo lo que el HashMap interno utiliza para almacenar sus valores, pero realmente no importa ya que ese contenedor interno nunca contendrá valores duplicados.

EDITAR : Para abordar el comentario de Matthew, tiene razón; lo tenía al revés. El HashMap interno se escribe con los Objetos que componen el Establecer elementos . Los valores del HashMap son un objeto que simplemente se almacena en los cubos de HashMap.

 0
Author: Andy Gherna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-05 14:40:59

Diferencias entre HashSet y HashMap en Java

1) La primera y más significativa diferencia entre HashMap y HashSet es que HashMap es una implementación de la interfaz de mapa, mientras que HashSet es una implementación de la interfaz de conjunto, lo que significa que HashMap es una estructura de datos basada en valores clave y HashSet garantiza la singularidad al no permitir duplicates.In reality HashSet es una envoltura alrededor de HashMap en Java, si nos fijamos en el código del método add(E e) de HashSet.java se verá el siguiente código :

public boolean add(E e) 
{
    return map.put(e, PRESENT)==null;
}

Donde su poner Objeto en el mapa como clave y valor es un objeto final PRESENTE que es dummy.

2) La segunda diferencia entre HashMap y HashSet es que, usamos el método add () para poner elementos en Set pero usamos el método put () para insertar clave y valor en HashMap en Java.

3) HashSet permite solo una clave nula, pero HashMap puede permitir una clave nula + múltiples valores nulos.

Eso es todo en la diferencia entre HashSet y HashMap en Java. En resumen, HashSet y HashMap son dos tipos diferentes de Colección, uno siendo Set y otro siendo Map.

 0
Author: Vibha Sanskrityayan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-05 09:26:12

HashSet

HashSet es la implementación de la Interfaz Set que no permite el valor duplicado todos los métodos que están en el Marco de Recopilación también están en la Interfaz Set por defecto, pero cuando estamos hablando de Hash set lo principal es que los objetos que se van a almacenar en HashSet deben anular el método equals() y hashCode() para que podamos comprobar la igualdad y no se almacene ningún valor duplicado en nuestro conjunto.si hemos creado nuestros propios objetos necesitamos implementar hashCode () e equal () de tal manera que será capaz de comparar objetos correctamente cuando se almacenan en un conjunto para que los objetos duplicados no se almacenan,si no tenemos override este método los objetos tomarán la implementación predeterminada de este método.

Método: el método public boolean add (Object o) se usa para agregar un elemento en un conjunto que devuelve false si es un valor duplicado en caso de HashSet de lo contrario devuelve true si se agrega exitoso.

HashMap

HashMap es una implementación de Map Interface, que asigna una clave a valor.Las claves duplicadas no están permitidas en un mapa.Básicamente map Interface tiene dos clases de implementación HashMap y TreeMap la principal diferencia es que TreeMap mantiene el orden de los objetos pero HashMap no lo hará.HashMap permite valores nulos y claves nulas.HashMap no está sincronizado, pero collection framework proporciona métodos para que podamos sincronizarlos si hay varios subprocesos ir a acceder a nuestro hashmap y un hilo es estructuralmente cambiar nuestro mapa.

Método el método public Object put(Object Key,Object value) se utiliza para agregar elementos en el mapa.

 0
Author: Ramkailash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-05 08:59:26

HashMap es una implementación Map, que permite valores duplicados pero claves no duplicadas.. Para agregar un objeto se requiere un par Clave / Valor. Se permiten claves nulas y valores nulos. eg:

{The- > 3, world - >5, is - >2, nice- > 4}

HashSet es una implementación Set, que no permite duplicados.Si ha intentado agregar un objeto duplicado, una llamada al método public boolean add(Object o), entonces el conjunto permanece sin cambios y devuelve false. eg:

[El,mundo,es, agradable]

 0
Author: Meenakshi Pant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-24 15:45:32

Un HashSet se implementa en términos de un HashMap . Es un mapeo entre la clave y un objeto PRESENTE.

 -1
Author: Matthew Flaschen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-05 13:59:05

Casi respondiste tu propia pregunta: el hashset no permite valores duplicados. sería trivial construir un hashset usando un hashmap de respaldo (y solo una comprobación para ver si el valor ya existe). supongo que las diversas implementaciones de Java hacen eso, o implementan algún código personalizado para hacerlo de manera más eficiente.

 -1
Author: oedo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-05 13:59:19

Básicamente en HashMap, el usuario debe proporcionar tanto la Clave como el Valor, mientras que en HashSet solo se proporciona el Valor, la Clave se deriva automáticamente del Valor mediante el uso de la función hash. Así que después de tener tanto la clave como el valor, el HashSet se puede almacenar como HashMap internamente.

 -1
Author: Munish Goyal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-07 06:50:44

HashSet y HashMap ambos almacenan pares, la diferencia radica en que en HashMap se puede especificar una clave mientras que en HashSet la clave proviene del código hash del objeto

 -1
Author: prateeksarda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-23 18:48:58

HashMaps permitir una clave nula y valores nulos. No están sincronizados, lo que aumenta la eficiencia. Si es necesario, puede sincronizarlos usando Collections.SynchronizedMap()

Hashtables no permitir claves nulas y están sincronizadas.

 -1
Author: Appesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-04 12:22:21

HashMap es una implementación de la interfaz de mapa HashSet es una implementación de Set Interfaz

HashMap Almacena datos en forma de par de valores clave HashSet Almacenar solo objetos

El método Put se usa para agregar elementos en el mapa Agregar método se utiliza para agregar elemento se establece

En el mapa hash el valor del hashcode se calcula utilizando el objeto key Aquí el objeto miembro se usa para calcular el valor de hashcode que puede ser el mismo para dos objetos, por lo que el método equal () se usa para verificar la igualdad si devuelve false que significa que dos objetos son diferentes.

HashMap es más rápido que hashset porque la clave única se usa para acceder al objeto HashSet es más lento que Hashmap

 -1
Author: Hengameh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-04 14:31:58