我很担心Scala的HashSet
和Set
类型,因为它们似乎都做同样的事情。
HashSet
是一个“显式集合类”(与Set
相比)。这是什么意思?答案 0 :(得分:34)
Scala的可变和不可变HashSet
实现是可以实例化的具体类。例如,如果您明确要求新的scala.collection.immutable.HashSet
,您将始终获得一个由散列特里实现的集合。还有其他一些实现,例如ListSet
,它使用列表。
Set
是trait,所有设置实现都扩展(而在Java中,Set
是一个接口)。
Set
也是具有apply
**方法的伴随对象*。当您致电Set(...)
时,您正在调用此工厂方法并获得某种Set
的返回值。它可能是HashSet
,但可能是其他一些实现。根据{{3}},不可变集的默认实现具有空集的特殊表示,并且设置大小最多为4.不可变集大小为5及以上,可变集都使用hashSet。
*在Scala中,您可以创建与您的类或特征同名的单例object
,而不是使用静态类方法。这称为伴随对象,您在其上定义的方法可以称为ObjectName.method()
,类似于您在Java中调用静态方法的方式。
** Set(x)
是Set.apply(x)
的语法糖。