Las implementaciones cambiables e inmutables de Scala HashSet
son clases concretas que puede crear instancias. Por ejemplo, si solicita explícitamente un nuevo scala.collection.immutable.HashSet
, siempre obtendrá un conjunto implementado por un hash trie. Existen otras implementaciones configuradas, como ListSet
, que usa una lista.
Set
es un trait que extiende todas las implementaciones del conjunto (mientras que en Java, Set
es una interfaz).
Set
es también un objeto complementario * con un método apply
**. Cuando llamas al Set(...)
, llamas a este método de fábrica y obtienes un valor de retorno que es de algún tipo de Set
. Podría ser un HashSet
, pero podría ser alguna otra implementación. De acuerdo con 2, la implementación predeterminada para un conjunto inmutable tiene una representación especial para el conjunto vacío y establece el tamaño hasta 4. Los conjuntos inmutables de tamaño 5 y superiores y los conjuntos mutables usan todos hashSet.
* En Scala, en lugar de tener métodos estáticos de clase, puede crear un producto único object
con el mismo nombre que su clase o rasgo. Esto se denomina objeto complementario, y los métodos que defina en él se pueden llamar como ObjectName.method()
, de forma similar a cómo llamaría a un método estático en Java.
** Set(x)
es azúcar sintáctica para Set.apply(x)
.
vea también [otra versión de esta pregunta] (http://stackoverflow.com/questions/18759913/what-is-the-difference-between-hashset-and-set-and-when-should-each-one), así como una pregunta similar para ['Map' vs' HashMap'] (http://stackoverflow.com/questions/31685236/scala-map-vs-hashmap) – EthanP