为什么将不可变列表实现为链表?

use*_*666 5 f#

根据F#的list 文档:

  • " F#中的列表是一个有序的,不可变的同类型元素系列 "

  • " F#中的列表被实现为单链表 "

为什么不在内存中连续实现它,因为它是不可变的,因此具有固定的大小?为什么要使用F#list而不是F#array

Gus*_*Gus 3

它们有不同的用途,例如:

您可以在 F# 中使用数组来存储需要以相对较低的开销随机访问的大量数据。

当您需要通过递归函数的迭代来累积某些内容时,F# 中的列表非常有用。数组在这里表现不佳,因为它们具有固定的大小。

使用list,您可以在 O(M) 时间内将 ListM(大小 M)的所有元素添加到 ListN(大小 N)。同样,您可以在 O(1) 时间内将单个元素添加到任何列表中。

  • 是的,它会在列表前面添加一个元素。将元素添加到列表末尾并不便宜,但通常您不会这样做。 (2认同)