Ho letto/ricercato il motivo per cui HashMap
è più veloce di HashSet
.Perché HashMap è più veloce di HashSet?
Io non sono del tutto la comprensione dei seguenti dichiarazioni:
HashMap
è più veloce diHashSet
perché i valori sono associati ad una chiave univoca.In
HashSet
, l'oggetto membro viene utilizzato per il calcolo del valore hashcode che può essere lo stesso per due oggetti, pertanto il metodoequals()
viene utilizzato per verificare l'uguaglianza. Se restituiscefalse
, ciò significa che i due oggetti sono diversi. InHashMap
, il valore hashcode viene calcolato utilizzando l'oggetto chiave.Il valore di codice hash
HashMap
viene calcolato utilizzando l'oggetto chiave. Qui, l'oggetto membro viene utilizzato per calcolare l'hashcode, che può essere lo stesso per due oggetti, quindi il metodoequals()
viene utilizzato per verificare l'uguaglianza. Se restituiscefalse
, ciò significa che i due oggetti sono diversi.
Per concludere la mia domanda:
ho pensato
HashMap
eHashSet
calcolare il codice hash nello stesso modo. Perché sono diversi?Puoi fornire un esempio concreto di come
HashSet
eHashMap
calcoli l'hashcode in modo diverso?So cosa è un "oggetto chiave", ma cosa significa "oggetto membro"?
HashMap
può fare le stesse cose diHashSet
e più veloce. Perché abbiamo bisogno diHashSet
? Esempio:HashMap <Object1, Boolean>= new HashMap<Object1, boolean>(); map.put("obj1",true); => exist map.get("obj1"); =>if null = not exist, else exist
Dovresti leggere la differenza tra 'Mappa' e' Imposta'. Sono due diversi tipi di 'Collection's. Una volta fatto ciò, dovrebbe essere chiaro il motivo per cui ottenere un oggetto specifico da una mappa è più veloce che da un set. – Magnilex
Hashset è costruito su HashMap. E Set è usato per l'unicità. Non è una collezione di coppie di valori chiave. –
Sì. So che implementano un'interfaccia diversa. Ma alcune persone dicono che l'hashset sta usando hashmap nel backend. Se è così, perché hashset sarà più lento di hashmap? – runcode