【发布时间】:2014-10-03 08:23:57
【问题描述】:
想知道scala是如何排列set中的数据的。
scala> val imm = Set(1, 2, 3, "four") //immutable variable
imm : scala.collection.immutable.Set[Any] = Set(1, 2, 3, four)
scala> var mu = Set(1, 2, 3, "four", 9)
mu: scala.collection.immutable.Set[Any] = Set(four, 1, 9, 2, 3)
scala> mu += "five"
scala> mu.toString
res1: String = Set(four, 1, 9, 2, 3, five)
在不可变 Set 的情况下插入顺序保持不变,但在可变 Set 中则不存在。
此外,无论我用 var xyz = Set(1, 2, 3, "four", 9) 创建一个新集合多少次,存储的顺序都保持不变 Set(four, 1, 9, 2, 3)。所以它不是随机存储的,它背后有一些我想知道的逻辑。而且,这样的行为有什么好处吗?
【问题讨论】:
-
“它不是随机存储的,它背后有一些逻辑” - 好吧,你以为它背后没有逻辑吗?此外,计算机在“随机”方面非常糟糕。谷歌“哈希表”。
-
除非你使用 sorted impl (
SortedSer),否则 set 只保证元素是唯一的,与 order 无关,那里有实现细节。想知道的话可以看源码。
标签: scala set scala-collections