Scala 是否会自动更改集合中数据的顺序?

mah*_*hdi 2 scala

我正在查看 scala 的一个集合示例,我注意到当创建 states3 时,编译器更改了该集合成员的顺序,怀俄明州排在第三位,现在是最后一个。有人可以解释为什么会发生这种情况吗?

scala> val states = Set("Alabama", "Alaska", "Wyoming")
states: scala.collection.immutable.Set[String] = Set(Alabama, Alaska, Wyoming)
scala> val states2 = states + "Virginia"
states2: scala.collection.immutable.Set[String] =
Set(Alabama, Alaska, Wyoming, Virginia)
scala> val states3 = states2 + ("New York", "Illinois")
states3: scala.collection.immutable.Set[String] =
Set(Alaska, Virginia, Alabama, New York, Illinois, Wyoming)
Run Code Online (Sandbox Code Playgroud)

从编程 Scala 中获取的示例:可扩展性 = 函数式编程 + 对象 by Dean Wampler

Mat*_*zok 5

Set仅凭其自身的保证,相同的元素不能插入两次(通过相同的方式,我们可以理解与匹配true的结果==/.equals比较以填充合同)。如果您的类型只是,则无法保证该顺序,这很可能意味着它将优化内部结构以方便比较。.hashcode.equalsSetHashSet.hashcode

如果您想保留插入顺序(假设插入两次的同一元素不会改变其第一次插入的顺序),则使用ListSet.

如果您想根据某些Ordering用途对元素进行排序SortedSet


Jör*_*tag 5

Scala 是否会自动更改集合中数据的顺序?

不,它不是,原因很简单Set,说自己一个订单,你不能改变的东西不存在。

请注意,这与 Scala 甚至编程无关。这通常是集合性质的一部分。