Map 和 Set 的实际类(不是抽象类,也不是特征类)是什么?

2024-06-01

在 Scala 中,映射和集合文字可以通过以下方式创建:

val m = Map(1->"a")

以及引用的类型m字面意思都是Map[Int, String].

然而,scala文档表明Map实际上是一个特征,具有需要实现才能实例化的抽象成员:scala.collection.Map http://www.scala-lang.org/api/2.11.8/#scala.collection.Map, scala.collection.immutable.Map http://www.scala-lang.org/api/2.11.8/#scala.collection.immutable.Map, scala.collection.mutable.Map http://www.scala-lang.org/api/2.11.8/#scala.collection.mutable.Map

所以我的问题是:字面量的实际具体类是什么Map是基于?上面同样的问题适用于Set以及。


您可以使用以下命令找到具体的运行时类getClass:

scala> println(m.getClass)
class scala.collection.immutable.Map$Map1

So it's Map1 http://www.scala-lang.org/api/2.11.8/#scala.collection.immutable.Map%24%24Map1,一个内部定义的类Map伴生对象。但随后我们在稍大的地图上尝试同样的操作:

scala> val m2 = Map(1 -> "a", 2 -> "b")
m2: scala.collection.immutable.Map[Int,String] = Map(1 -> a, 2 -> b)

scala> println(m2.getClass)
class scala.collection.immutable.Map$Map2

这是一个不同的班级。让我们尝试使用更多元素的地图:

scala> println((0 to 10).map(i => i -> i.toString).toMap.getClass)
class scala.collection.immutable.HashMap$HashTrieMap

这是另一个类。

简而言之,您从中获得的具体运行时类Map(...) or toMap是一个实现细节,绝大多数时候你不需要担心它(但是当你这样做时,你可以检查getClass).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Map 和 Set 的实际类(不是抽象类,也不是特征类)是什么? 的相关文章

随机推荐