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

Kri*_*oks 18 scala set hashset

我对Scala HashSetSet类型很困惑,因为它们似乎都做同样的事情.

  • 他们之间有什么区别?
  • 它在Java中是一样的吗?
  • 在我的参考文献中,它表示这HashSet是一个"显式集合类"(与之相比Set).那是什么意思?

Ben*_*mes 34

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

Set是一个特征,所有该组实施方案中延伸(在Java中,而,Set是一个接口).

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


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

**Set(x)是语法糖Set.apply(x).

  • `它可能是一个HashSet,但可能是其他一些实现. - 但是哪些因素取决于返回类型的Set?之前我认为`Set`默认实现是`HashSet`,对于`IndexedSeq` - Vector等等. (3认同)