A parte il fatto che HashSet
non consente valori duplicati, qual è la differenza tra HashMap
e HashSet
?
Voglio dire implementazione saggia? È un po 'vago perché entrambi usano le tabelle hash per memorizzare i valori.
A parte il fatto che HashSet
non consente valori duplicati, qual è la differenza tra HashMap
e HashSet
?
Voglio dire implementazione saggia? È un po 'vago perché entrambi usano le tabelle hash per memorizzare i valori.
Risposte:
Sono costrutti completamente diversi. A HashMap
è un'implementazione di Map
. Una mappa associa le chiavi ai valori. La ricerca della chiave avviene utilizzando l'hash.
D'altra parte, a HashSet
è un'implementazione di Set
. Un set è progettato per abbinare il modello matematico di un set. A HashSet
usa a HashMap
per sostenere la sua implementazione, come hai notato. Tuttavia, implementa un'interfaccia completamente diversa.
Quando stai cercando quale sarà il migliore Collection
per i tuoi scopi, questo tutorial è un buon punto di partenza. Se vuoi davvero sapere cosa sta succedendo, c'è anche un libro per quello .
HashSet è un set , ad esempio {1,2,3,4,5}
HashMap è una mappa chiave -> valore (chiave per valore), ad es. {A -> 1, b -> 2, c -> 2, d -> 1}
Nota nel mio esempio sopra che nella HashMap non devono esserci chiavi duplicate, ma può avere valori duplicati.
Nel HashSet non devono essere presenti elementi duplicati.
HashSet non è sincronizzato, il che significa che non sono adatti per operazioni thread-safe fino a quando non sono sincronizzati esplicitamente. [Somiglianza]
add contains next notes
HashSet O(1) O(1) O(h/n) h is the table
HashMap non è sincronizzato, il che significa che non sono adatti per operazioni thread-safe fino a quando non sono sincronizzati esplicitamente. [Somiglianza]
get containsKey next Notes
HashMap O(1) O(1) O(h/n) h is the table
Si prega di fare riferimento a questo articolo per trovare ulteriori informazioni.
È davvero un peccato che entrambi i loro nomi inizino con Hash . Questa è la parte meno importante di loro. Le parti importanti vengono dopo l' Hash : il Set e la Mappa , come altri hanno sottolineato. Ciò che sono, rispettivamente, sono un set - una raccolta non ordinata - e una mappa - una raccolta con accesso con chiave. Capita di essere implementati con hash - ecco da dove vengono i nomi - ma la loro essenza è nascosta dietro quella parte dei loro nomi.
Non essere confuso dai loro nomi; sono cose profondamente diverse.
Gli Hashset
attrezzi interni HashMap
. Se vedi l' implementazione interna, i valori inseriti in HashSet sono memorizzati come chiavi in HashMap e il valore è un oggetto fittizio della classe Object.
La differenza tra HashMap vs HashSet è: -
HashMap
contiene coppie di valori-chiave e ogni valore è accessibile dalla chiave dove HashSet deve essere ripetuto ogni volta in quanto non esiste un metodo get.HashMap
implementa l'interfaccia Mappa e consente un valore null come chiave e più valori null come valori. Se HashSet
implementa Imposta interfaccia, consente solo un valore null e nessun valore duplicato. (Ricorda una chiave null consentita nella chiave HashMap quindi un valore null in HashSet come HashSet implementa HashMap internamente). HashSet
e HashMap
non mantiene l'ordine di inserimento durante l'iterazione.Come suggeriscono i nomi, un HashMap è una mappa associativa (mappatura da una chiave a un valore), un HashSet è solo un Set .
Differenze tra HashSet e HashMap in Java
1) La prima e più significativa differenza tra HashMap e HashSet è che HashMap è un'implementazione dell'interfaccia Map mentre HashSet è un'implementazione dell'interfaccia Set, il che significa che HashMap è una struttura di dati basata su valori chiave e HashSet garantisce l'unicità non consentendo duplicati. realtà HashSet è un wrapper per HashMap in Java, se guardi il metodo code of add (E e) di HashSet.java vedrai il seguente codice:
public boolean add(E e)
{
return map.put(e, PRESENT)==null;
}
dove mettere l'oggetto nella mappa come chiave e valore è un oggetto finale PRESENTE che è fittizio.
2) La seconda differenza tra HashMap e HashSet è che usiamo il metodo add () per mettere gli elementi in Set ma usiamo il metodo put () per inserire chiave e valore in HashMap in Java.
3) HashSet consente solo una chiave null, ma HashMap può consentire una chiave null + più valori null.
Questo è tutto sulla differenza tra HashSet e HashMap in Java. In breve, HashSet e HashMap sono due diversi tipi di Collection, uno impostato e l'altro Map.
Differenze tra HashSet e HashMap in Java
HashSet utilizza internamente HashMap per archiviare oggetti. Quando aggiunge il metodo (String) chiamato chiama il metodo put (chiave, valore) HahsMap dove key = String object & value = new Object (Dummy). Quindi non mantiene duplicati perché le chiavi non sono altro che Valore Oggetto.
gli oggetti che sono memorizzati come chiave in Hashset / HashMap dovrebbero sovrascrivere hashcode e uguale a contratto.
Le chiavi utilizzate per accedere / archiviare oggetti valore in HashMap devono essere dichiarate come Final perché, quando viene modificato, l'oggetto valore non può essere individuato e restituisce null.
A HashMap
è quello di aggiungere, ottenere, rimuovere, ... oggetti indicizzati da una chiave personalizzata di qualsiasi tipo.
A HashSet
è quello di aggiungere elementi, rimuovere elementi e verificare la presenza di elementi confrontando i loro hash.
Quindi una HashMap contiene gli elementi e un HashSet ricorda i loro hash.
equals()
metodi.
Differenze: rispetto all'erarchia: HashSet implementa Set. HashMap implementa Map e memorizza un mapping di chiavi e valori.
Un uso di HashSet e HashMap rispetto al database ti aiuterebbe a capire il significato di ciascuno.
HashSet: viene generalmente utilizzato per la memorizzazione di oggetti di raccolta univoci. Ad esempio: potrebbe essere utilizzato come classe di implementazione per l'archiviazione di una relazione di relazione multipla tra l'
oggetto di classe e l'offerta di classe in cui (l'articolo ha molte offerte)
Mappa hash: viene utilizzata per mappare una chiave al valore.Il valore può essere nullo o qualsiasi oggetto / list of Object (che è l'oggetto in sé).
Un HashSet è implementato in termini di HashMap . È una mappatura tra la chiave e un oggetto PRESENT.
Un HashSet utilizza una HashMap internamente per memorizzare le sue voci. Ogni voce nella HashMap interna è codificata da un singolo Oggetto, quindi tutte le voci hanno l'hash nello stesso bucket. Non ricordo ciò che HashMap interno utilizza per archiviare i suoi valori, ma non importa perché il contenitore interno non conterrà mai valori duplicati.
EDIT : Per rispondere al commento di Matthew, ha ragione; L'ho avuto al contrario. La HashMap interna è codificata con gli oggetti che compongono gli elementi Set . I valori di HashMap sono un oggetto che è semplicemente memorizzato nei secchi di HashMap.
HashMap
è Map
un'implementazione che consente valori duplicati ma non chiavi duplicate. . Per aggiungere un oggetto è necessaria una coppia chiave / valore. Sono consentite chiavi Null e valori Null. per esempio:
{The-> 3, mondo-> 5, è-> 2, bello-> 4}
HashSet
è Set
un'implementazione, che non consente i duplicati . Se si è tentato di aggiungere un oggetto duplicato, una chiamata al public boolean add(Object o)
metodo, il set rimane invariato e ritorna false
. per esempio:
[Il mondo, è, bello]
hai praticamente risposto alla tua domanda - hashset non consente valori duplicati. sarebbe banale costruire un hashset usando una hashmap di supporto (e solo un controllo per vedere se il valore esiste già). immagino che le varie implementazioni java lo facciano o implementino del codice personalizzato per farlo in modo più efficiente.
java.util.HashSet
dice che è supportato da a java.util.HashMap
.
Fondamentalmente in HashMap, l'utente deve fornire sia la chiave che il valore, mentre in HashSet fornisci solo il valore, la chiave viene derivata automaticamente dal valore utilizzando la funzione hash. Quindi, dopo avere sia Key che Value, HashSet può essere memorizzato come HashMap internamente.
HashSet e HashMap entrambe le coppie di negozi, la differenza sta nel fatto che in HashMap è possibile specificare una chiave mentre in HashSet la chiave proviene dal codice hash dell'oggetto
HashMaps
consentire una chiave nulla e valori null. Non sono sincronizzati, il che aumenta l'efficienza. Se necessario, è possibile sincronizzarli utilizzandoCollections.SynchronizedMap()
Hashtables
non consentire chiavi null e sono sincronizzate.
HashMap è un'implementazione dell'interfaccia Map HashSet è un'implementazione di Set Interface
HashMap Memorizza i dati sotto forma di coppia valore-chiave HashSet Store solo oggetti
Il metodo Put viene utilizzato per aggiungere elementi nella mappa Il metodo Aggiungi viene utilizzato per aggiungere elementi è Set
Nella mappa hash il valore hashcode viene calcolato utilizzando l'oggetto chiave Qui l'oggetto membro viene utilizzato per calcolare il valore hashcode che può essere lo stesso per due oggetti, quindi il metodo equal () viene utilizzato per verificare l'uguaglianza se restituisce false, il che significa che due oggetti sono diversi.
HashMap è più veloce di hashset perché viene utilizzata una chiave univoca per accedere all'oggetto HashSet è più lento di Hashmap