quanto ne so, java.util.Hashtable
sincronizza ogni metodo nell'interfaccia java.util.Map
, mentre Collections.synchronizedMap(hash_map)
restituisce un oggetto involucro contenente metodi sincronizzati delega chiamate al reale hash_map
(correggetemi se ho torto).Differenza tra Hashtable e Collections.synchronizedMap (HashMap)
Ho due domande:
Che differenza fa per sincronizzare ogni metodo e di avere una classe wrapper? Quali sono gli scenari da scegliere l'uno rispetto all'altro?
Cosa succede quando facciamo
Collections.synchronizedMap(hash_table)
? Sarà uguale semplicemente a un normalejava.util.Hashtable
?
possibile duplicato di [Differenze tra HashMap e Hashtable?] (Http://stackoverflow.com/questions/40471/differenze-tra -hashmap-and-hashtable) –
Questo non è un duplicato di * quella * domanda. Si tratta di confrontare il wrapper sincronizzato su una HashMap (o HashTable) con un HashTable. –
Sarei interessato a sapere se ci sono differenze nelle prestazioni, che nessuna delle attuali risposte risolve. Chiamare i metodi di un 'Collections.synchronizedMap' tramite una variabile di tipo Map significa che ci sono 2 chiamate virtuali di interfaccia prima di arrivare all'implementazione, mentre con Hashtable c'è almeno 1 chiamata virtuale e si può dichiarare la variabile come tipo Hashtable direttamente, e fallo con 0 chiamate virtuali. Ma forse HashMap differisce in altri modi che lo rendono più veloce nel complesso. – Boann