为什么Buffer和List对象相等(即使它们来自不同的类)?

Joh*_*ood 8 buffer scala list equals

scala> import scala.collection.mutable.Buffer
import scala.collection.mutable.Buffer

scala> val b = Buffer(1, 2, 3)
b: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1, 2, 3)

scala> val l = List(1, 2, 3)
l: List[Int] = List(1, 2, 3)

scala> b == l
res1: Boolean = true
Run Code Online (Sandbox Code Playgroud)

我在想,为什么可以将Buffer和List对象与true结果进行比较?

我一直认为,因为他们来自不同的阶层,所以在比较时他们必须是假的.有人可以解释一下,为什么这样实现?

Ixx*_*Ixx 17

来自http://www.scala-lang.org/docu/files/collections-api/collections_41.html

集合库具有统一的平等和散列方法.首先,我们的想法是将集合划分为集合,映射和序列.不同类别的馆藏总是不相等.例如,Set(1,2,3)不等于List(1,2,3),即使它们包含相同的元素.另一方面,在同一类别中,集合是相等的,当且仅当它们具有相同的元素时(对于序列:同一元素中的相同元素).例如,List(1,2,3)== Vector(1,2,3)和HashSet(1,2)== Treeset(2,1).

对于等式检查,集合是可变的还是不可变的并不重要.(......)

所以这是因为scala.collection.mutable.Buffer和List属于同一类别(序列),然后将相等定义为具有相同的元素.

  • 除了`List(1,2,3)== Array(1,2,3)`返回`false`!`Array`是一种特殊情况,因为`Array`上的`==`方法是本机Java方法,它不遵循整个Scala集合逻辑.此外,在您指向的链接中,文本现在显示"List(1,2,3)== Vector(1,2,3)`.我已经编辑了你的答案来解决这个问题. (2认同)