【问题标题】:The difference between 'HashSet' and 'Set' in Scala?Scala中'HashSet'和'Set'的区别?
【发布时间】:2011-08-10 22:24:48
【问题描述】:

我对 Scala 的 HashSetSet 类型感到非常困惑,因为它们似乎都在做同样的事情。

  • 它们有什么区别?
  • Java 中也一样吗?
  • 在我的参考中它说HashSet 是一个“显式集合类”(与Set 相比)。这是什么意思?

【问题讨论】:

标签: scala set hashset


【解决方案1】:

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

Set 是一个 trait,所有 set 实现都对其进行了扩展(而在 Java 中,Set 是一个接口)。

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


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

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

【讨论】:

  • It might be a HashSet, but could be some other implementation. - 但哪些因素取决于返回的 Set 类型?在我认为Set 的默认实现是HashSet 之前,IndexedSeq - Vector 等等..
猜你喜欢
  • 2011-07-05
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 2015-06-18
  • 1970-01-01
  • 2012-05-13
  • 1970-01-01
相关资源
最近更新 更多