是否可以在不可变链表中创建一个循环?

Vla*_*kov 8 java algorithm scala linked-list

假设我们在Java中具有以下结构:

class List {
  // we're immutable
  final List next;
  final int value;

  public List(int value, List next) {
    this.next = next;
    this.value = value;
  }
}
Run Code Online (Sandbox Code Playgroud)

Scala内置了对不可变单链表的支持.这将是:

val l = List(1, 2, 3) // immutable
Run Code Online (Sandbox Code Playgroud)

那么,是否有可能在这种列表中创建一个循环(不可变的单链表).按周期,我的意思是:

在此输入图像描述

sen*_*nia 11

您应该使用lazy集合来创建无限集合.你可以使用Stream:

def loopStream: Stream[Int] = {
  lazy val loop: Stream[Int] = 3 #:: 4 #:: 5 #:: 6 #:: 7 #:: 8 #:: loop
  1 #:: 2 #:: loop
}

loopStream.take(22).toList
// List(1, 2, 3, 4, 5, 6, 7, 8, 3, 4, 5, 6, 7, 8, 3, 4, 5, 6, 7, 8, 3, 4)
Run Code Online (Sandbox Code Playgroud)

  • @VladimirKostyukov:你不能使用*immutable*数据结构创建无限集合而不会有某种懒惰.在`Java`中,您可以在没有语言支持的情况下使用延迟评估,但使用一些样板代码. (4认同)