Scala中的递归集合,如List

Scala中的递归集合,如List,scala,collections,recursive-datastructures,Scala,Collections,Recursive Datastructures,其目的是使用Scala集合,其中大小不需要迭代或递归计算 例如,列表被证明是递归构造,例如,为了获得需要迭代的大小;即对列表中的元素数进行ON操作 因此,询问此操作的集合是O1? 非常感谢 对于不可变集合,Vector具有恒定大小的操作 可变数组具有常量大小操作 对于可变集合,ListBuffer和ArrayBuffer都有固定大小的操作。 根据代码快速查看,主要不可变集合的方法大小成本: Seq: LinearSeq: List - O(N) Stream - O(N)*

其目的是使用Scala集合,其中大小不需要迭代或递归计算

例如,列表被证明是递归构造,例如,为了获得需要迭代的大小;即对列表中的元素数进行ON操作

因此,询问此操作的集合是O1? 非常感谢

对于不可变集合,Vector具有恒定大小的操作 可变数组具有常量大小操作 对于可变集合,ListBuffer和ArrayBuffer都有固定大小的操作。 根据代码快速查看,主要不可变集合的方法大小成本:

Seq:
  LinearSeq:
    List - O(N)
    Stream - O(N)*
    Queue - O(N) // Implemented using List
    Stack - O(N)* // Implemented using List, with additional complexity
  IndexedSeq:
    Vector - O(1)
    NumericRange - O(1)
    Array - O(1) // WrappedArray, ArrayOps
    String - O(1) // WrappedString, StringOps
    Range - O(1)
Set:
  HashSet - O(1) // HashSet.HashTrieSet
  TreeSet - O(N) // RedBlackTree.count - recursive with stack usage 
  BitSet - O(Max)* // fast enough. O(1) for collections of small ints
  ListSet - O(N)
Map:
  HashMap - O(1) // HashMap.HashTrieMap
  TreeMap - O(N) // RedBlackTree.count - recursive with stack usage
  ListMap - O(N)
流动 从文件:

为了计算流的长度,必须首先完全实现它,这可能会导致对无限系列的完整计算,假设这就是流所表示的

堆栈 Stacklength复杂度比Listlength复杂度差得多:它创建N个新对象在堆栈上迭代

位集合 位集用于小整数的集合

BitSetsize的复杂性取决于最大元素,而不是元素数。是关于OMax/64的。另见

树集/树映射
我不确定TreeSet和TreeMap的复杂性,它看起来像是递归的,而不是尾部递归。请参阅。

我最近找到了Daniel Spiewak的一篇演讲,他谈到了scala中的函数数据结构。这里有一个链接,也许你可以提取你需要的知识。