Además 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.
Además 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.
Respuestas:
Son construcciones completamente diferentes. A HashMap
es una implementación de Map
. Un mapa asigna claves a valores. La búsqueda de claves se produce utilizando 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
usa a HashMap
para respaldar su implementación, como usted señaló. Sin embargo, implementa una interfaz completamente diferente.
Cuando esté buscando lo mejor Collection
para sus propósitos, este Tutorial es un buen punto de partida. Si realmente quieres saber qué está pasando, también hay un libro para eso .
HashSet es un conjunto , por ejemplo, {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.
HashSet no está sincronizado, lo que significa que no son adecuados para operaciones seguras con subprocesos hasta que se sincronicen explícitamente. [Similitud]
add contains next notes
HashSet O(1) O(1) O(h/n) h is the table
HashMap no está sincronizado, lo que significa que no son adecuados para operaciones seguras de subprocesos hasta que se sincronicen explícitamente. [Similitud]
get containsKey next Notes
HashMap O(1) O(1) O(h/n) h is the table
Consulte este artículo para obtener más información.
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 Conjunto y el Mapa , como otros han señalado. Lo que son, respectivamente, son un conjunto , una colección desordenada, y un mapa , una colección con acceso con clave. Se implementan con hashes, de ahí provienen los nombres, pero su esencia está oculta detrás de esa parte de sus nombres.
No te confundas con sus nombres; Son cosas profundamente diferentes.
El Hashset
internamente implementa HashMap
. Si ve la implementación interna , los valores insertados en HashSet se almacenan como claves en HashMap y el valor es un objeto ficticio de la clase Object.
La diferencia entre HashMap y HashSet es: -
HashMap
contiene pares de valores clave y se puede acceder a cada valor mediante la clave, ya que HashSet debe repetirse cada vez que no hay un método get.HashMap
implementa la interfaz Map y permite un valor nulo como clave y múltiples valores nulos como valores. Donde HashSet
implementa la interfaz Set, solo permite un valor nulo y ningún valor duplicado. ya que HashSet implementa HashMap internamente). HashSet
y HashMap
no mantiene el orden de inserción mientras itera.Como los nombres implican, un HashMap es un mapa asociativo (asignación de una clave a un valor), un HashSet es solo un conjunto .
Diferencias entre HashSet y HashMap en Java
1) La primera diferencia más significativa 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 Set, lo que significa que HashMap es una estructura de datos basada en valores clave y HashSet garantiza la unicidad al no permitir duplicados. reality HashSet es un contenedor alrededor de HashMap en Java, si observa 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 Object en el mapa como clave y valor es un objeto final PRESENT que es ficticio.
2) La segunda diferencia entre HashMap y HashSet es que, utilizamos el método add () para colocar elementos en Set, pero utilizamos el método put () para insertar clave y valor en HashMap en Java.
3) HashSet solo permite una clave nula, pero HashMap puede permitir una clave nula + múltiples valores nulos.
Todo eso está en la diferencia entre HashSet y HashMap en Java. En resumen, HashSet y HashMap son dos tipos diferentes de Colección, uno es Set y otro Map.
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 put (key, value) HahsMap donde key = String object & value = new Object (Dummy) .por lo tanto, no mantiene duplicados porque las teclas no son más que Value Objeto.
Los objetos que se almacenan como clave en Hashset / HashMap deben anular el código hash y el contrato igual.
Las claves que se usan para acceder / almacenar objetos de valor en HashMap deben declararse como Final porque cuando se modifica, el objeto de Valor no se puede ubicar y devuelve nulo.
Una HashMap
es agregar, obtener, eliminar, ... objetos indexados por una clave personalizada de cualquier tipo.
A HashSet
es agregar elementos, eliminar elementos y verificar si hay elementos presentes comparando sus hashes.
Entonces, un HashMap contiene los elementos y un HashSet recuerda sus hashes.
equals()
métodos.
Diferencias: con respecto a la jerarquía: HashSet implementa Set. HashMap implementa Map y almacena una asignación de claves y valores.
El uso de HashSet y HashMap con respecto a la base de datos lo ayudaría a comprender la importancia de cada uno.
HashSet: generalmente se usa para almacenar objetos de colección únicos. Por ejemplo: podría usarse como clase de implementación para almacenar relaciones de muchos a uno entre el
artículo de clase y la oferta de clase donde (el artículo tiene muchas ofertas)
HashMap: se usa para asignar una clave al valor. El valor puede ser nulo o cualquier objeto / lista de objetos (que es un objeto en sí mismo).
Un HashSet se implementa en términos de un HashMap . Es un mapeo entre la clave y un objeto PRESENTE.
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 se combinan en el mismo depósito. No recuerdo qué utiliza el HashMap interno 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 tuve al revés. El HashMap interno está codificado con los Objetos que componen los elementos Set . Los valores de HashMap son un Objeto que simplemente se almacena en los depósitos de HashMap.
HashMap
es una Map
implementación que permite valores duplicados pero no claves duplicadas. . Para agregar un objeto se requiere un par clave / valor. Se permiten claves nulas y valores nulos. p.ej:
{The-> 3, world-> 5, is-> 2, nice-> 4}
HashSet
es una Set
implementación que no permite duplicados . Si intentó agregar un objeto duplicado, una llamada al public boolean add(Object o)
método, el conjunto permanece sin cambios y regresa false
. p.ej:
[El mundo es agradable]
prácticamente respondiste tu propia pregunta: 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 un código personalizado para hacerlo de manera más eficiente.
java.util.HashSet
dice que está respaldado por a java.util.HashMap
.
Básicamente, en HashMap, el usuario debe proporcionar clave y valor, mientras que en HashSet solo proporciona valor, la clave se deriva automáticamente de valor mediante la función hash. Entonces, después de tener Key y Value, HashSet se puede almacenar como HashMap internamente.
HashSet y HashMap almacenan pares, la diferencia radica en que en HashMap puede especificar una clave, mientras que en HashSet la clave proviene del código hash del objeto
HashMaps
permitir una clave nula y valores nulos. No están sincronizados, lo que aumenta la eficiencia. Si es necesario, puede sincronizarlos usandoCollections.SynchronizedMap()
Hashtables
no permiten claves nulas y están sincronizadas.
HashMap es una implementación de la interfaz de mapa HashSet es una implementación de Set Interface
HashMap Almacena datos en forma de pares de valores clave HashSet Almacena solo objetos
El método Put se usa para agregar elementos en el mapa El método Add se usa para agregar elementos es Set
En el mapa hash, el valor del código hash se calcula usando un objeto clave. Aquí, el objeto miembro se usa para calcular el valor del código hash, que puede ser el mismo para dos objetos, por lo que el método equal () se usa para verificar la igualdad si devuelve falso, lo que significa que dos objetos son diferentes.
HashMap es más rápido que hashset porque se usa una clave única para acceder al objeto HashSet es más lento que Hashmap