Scala链表stackoverflow

Nul*_*x00 5 scala linked-list

使用scala我已经向链表添加了大约100000个节点.当我使用函数长度时,例如mylist.length.我收到一个'java.lang.StackOverflowError'错误,我的列表要处理大吗?该列表只是字符串对象.

huy*_*hjl 11

看起来库实现不是尾递归的override def length: Int = if (isEmpty) 0 else next.length + 1.看起来这可以在邮件列表中讨论,以检查是否应该打开增强票证.

您可以像这样计算长度:

def length[T](l:LinkedList[T], acc:Int=0): Int =
  if (l.isEmpty) acc else length(l.tail, acc + 1)
Run Code Online (Sandbox Code Playgroud)

  • 我都是为了增强票.在"TraversableOnce"中,这种方法可以很容易地以非递归的方式实现.我甚至可以在这个注释行中实现它:`def length:Int = {var count = 0; foreach {_ => count + = 1}; 计数}`.回到`LinearSeq`,通过使用私有帮助器方法使原始实现完全尾递归,可以获得更好的性能.恕我直言,应该采取两种方法.你打开它,还是我? (5认同)