为什么将不可变列表实现为链表?
Why implement an immutable list as a linked-list?
根据 F# 的 list
documentation:
"F# 中的列表是有序的、不可变的 一系列相同类型的元素"= 14=]
"F# 中的列表实现为单链表"
为什么不在内存中连续实现它,因为它是不可变的,因此具有固定的大小?为什么要使用 F# list
而不是 F# array
?
它们有不同的用途,例如:
您在 F# 中使用数组来存储需要以相对较低的开销随机访问的大量数据。
当您需要在递归函数的迭代中积累一些东西时,F# 中的列表很有用。数组在这里表现不佳,因为它们的大小是固定的。
使用 list
,您可以在 O(M) 时间内将 ListM(大小 M)的所有元素添加到 ListN(大小 N)中。同样,您可以在 O(1) 时间内将单个元素添加到任何列表中。
根据 F# 的 list
documentation:
"F# 中的列表是有序的、不可变的 一系列相同类型的元素"= 14=]
"F# 中的列表实现为单链表"
为什么不在内存中连续实现它,因为它是不可变的,因此具有固定的大小?为什么要使用 F# list
而不是 F# array
?
它们有不同的用途,例如:
您在 F# 中使用数组来存储需要以相对较低的开销随机访问的大量数据。
当您需要在递归函数的迭代中积累一些东西时,F# 中的列表很有用。数组在这里表现不佳,因为它们的大小是固定的。
使用 list
,您可以在 O(M) 时间内将 ListM(大小 M)的所有元素添加到 ListN(大小 N)中。同样,您可以在 O(1) 时间内将单个元素添加到任何列表中。