Реализация по умолчанию класса case equals
наивно рекурсивна. Вы можете реализовать свою собственную хвостовую рекурсивную версию в List
. Вот начало:
sealed trait List[+T] {
override def equals(o: Object): boolean = o match {
case ls: List[_] => equalsRec(ls)
case _ => false
}
@tailrec
def equalsRec(ls: List[_]): boolean = ???