"b", "c" -> "d", "e" -> "f", "g" -> "h") a-6ren">
gpt4 book ai didi

scala - Scala 解释器 (REPL) 准确打印什么(使用 Map 和 HashMap 进行演示)?

转载 作者:行者123 更新时间:2023-12-01 13:21:11 25 4
gpt4 key购买 nike

我在 Scala 的 REPL 中有以下两个 map :

情况1

scala> var a1=Map("a" -> "b", "c" -> "d", "e" -> "f", "g" -> "h") 
a1: scala.collection.immutable.Map[String,String] = Map(a -> b, c -> d, e -> f, g -> h)

scala> var a2=Map("a" -> "b","c" -> "d","e" -> "f","g" -> "h","i" -> "j")
a2: scala.collection.immutable.Map[String,String] = Map(e -> f, a -> b, i -> j, g -> h, c -> d)

以上两个示例在 REPL 中打印相同的文本:
...
scala.collection.immutable.Map[String,String] = ...

但是以下两个示例显示了不同的输出文本:

案例二
scala> a1.getClass.getName
res10: String = scala.collection.immutable.Map$Map4

scala> a2.getClass.getName
res11: String = scala.collection.immutable.HashMap$HashTrieMap

为什么 REPL 中的文本输出( scala.collection.immutable.Map$Map4scala.collection.immutable.HashMap$HashTrieMap )不同?输出文本究竟是什么意思?我知道 Map超过四个元素使用 HashMap而不是 Map ,但为什么输出文本在情况 1(对于变量 a1a2 )中相同,而在情况 2 中不同?

最佳答案

如果您查看 reference documentation , 你可以读到 HashTrieMap是不可变映射的默认实现。

但是,Scala 对包含少于五个元素的不可变集合和映射进行了进一步优化。具有一到四个元素的集合和映射存储为单个对象,这些对象仅包含元素(或映射中的键/值对)作为字段 - 这就是您看到类 Map4 的原因。 .

关于scala - Scala 解释器 (REPL) 准确打印什么(使用 Map 和 HashMap 进行演示)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49881250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com