Why are Buffer and List objects equal (even they are from different classes)?

buffer, equals, list, scala

Solution

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

The collection libraries have a uniform approach to equality and hashing. The idea is, first, to divide collections into sets, maps, and sequences. Collections in different categories are always unequal. For instance, Set(1, 2, 3) is unequal to List(1, 2, 3) even though they contain the same elements. On the other hand, within the same category, collections are equal if and only if they have the same elements (for sequences: the same elements in the same oder). For example, List(1, 2, 3) == Vector(1, 2, 3), and HashSet(1, 2) == Treeset(2, 1).

It does not matter for the equality check whether a collection is mutable or immutable. (...)

So it's because scala.collection.mutable.Buffer and List belong to the same category (sequence) and equality is then defined as having equal elements.

Problem

``` 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 ``` I was wondering, why the Buffer and List object can be compared with a result of true ? I always thought, that because they are from different classes, they have to be false when compared. Can someone explain me, why it is implemented this way ?

Original source