Scala中'HashSet'和'Set'之间的区别?

时间:2011-08-10 22:24:49

标签: scala set hashset

我很担心Scala的HashSetSet类型,因为它们似乎都做同样的事情。

  • 他们之间有什么区别?
  • 在Java中是否相同?
  • 在我的参考文献中,它说HashSet是一个“显式集合类”(与Set相比)。这是什么意思?

1 个答案:

答案 0 :(得分:34)

Scala的可变和不可变HashSet实现是可以实例化的具体类。例如,如果您明确要求新的scala.collection.immutable.HashSet,您将始终获得一个由散列特里实现的集合。还有其他一些实现,例如ListSet,它使用列表。

Settrait,所有设置实现都扩展(而在Java中,Set是一个接口)。

Set也是具有apply **方法的伴随对象*。当您致电Set(...)时,您正在调用此工厂方法并获得某种Set的返回值。它可能是HashSet,但可能是其他一些实现。根据{{​​3}},不可变集的默认实现具有空集的特殊表示,并且设置大小最多为4.不可变集大小为5及以上,可变集都使用hashSet。


*在Scala中,您可以创建与您的类或特征同名的单例object,而不是使用静态类方法。这称为伴随对象,您在其上定义的方法可以称为ObjectName.method(),类似于您在Java中调用静态方法的方式。

** Set(x)Set.apply(x)的语法糖。