Le implementazioni di Scala HashSet
modificabili e immutabili sono lezioni concrete che è possibile creare. Ad esempio, se chiedi esplicitamente un nuovo scala.collection.immutable.HashSet
, otterrai sempre un set che è implementato da un trie di hash. Esistono altre implementazioni, come ListSet
, che utilizza un elenco.
Set
è un trait esteso a tutte le implementazioni impostate (mentre in Java, Set
è un'interfaccia).
Set
è anche un oggetto associato * con un metodo apply
**. Quando chiami Set(...)
, stai chiamando questo metodo di produzione e ottieni un valore di ritorno che è una specie di Set
. Potrebbe essere un HashSet
, ma potrebbe essere un'altra implementazione. Secondo 2, l'implementazione predefinita per un set immutabile ha una rappresentazione speciale per il set vuoto e imposta la dimensione fino a 4. I set immutabili di taglia 5 e superiori e i set mutabili utilizzano tutti hashSet.
* In Scala, invece di avere metodi di classe statico, è possibile creare un Singleton object
con lo stesso nome di tua classe o un tratto. Questo è chiamato oggetto complementare e i metodi definiti su di esso possono essere chiamati come ObjectName.method()
, in modo simile a come si chiamerebbe un metodo statico in Java.
** Set(x)
è zucchero sintattico per Set.apply(x)
.
fonte
2011-08-10 22:59:45
vedere anche [un'altra versione di questa domanda] (http://stackoverflow.com/questions/18759913/what-is-the-difference-between-hashset-and-set-and-when-should-each-one), così come una domanda simile per ['Map' vs' HashMap'] (http://stackoverflow.com/questions/31685236/scala-map-vs-hashmap) – EthanP