Scala数组属于哪一类



我正在分析Scala中的数组。我是根据​​《编程语言的概念》一书(Robert W.Sebesta著)。根据这本书,有五类数组,基于到下标范围的绑定、到存储的绑定以及存储的分配位置。类别包括:

  • 静态数组:是一个下标范围是静态绑定的,存储分配是静态的(在运行时之前完成)。静态数组的优点是效率:不需要动态分配或解除分配。缺点是阵列的存储在程序的整个执行时间内是固定的。

  • 固定堆栈动态数组:是一个静态绑定下标范围的数组,但分配是在执行期间的声明精化时完成的。固定堆栈动态阵列相对于静态阵列的优势在于空间效率。只要两个子程序不同时处于活动状态,一个子程序中的大数组可以与另一个子程序的大数组使用相同的空间。如果两个阵列位于不同时处于活动状态的不同块中,则情况也是如此。缺点是所需的分配和解除分配时间。

  • 堆栈动态数组:是一个在细化时动态绑定下标范围和存储分配的数组。然而,一旦绑定了下标范围并分配了存储,它们在变量的生存期内就会保持固定。与静态和固定堆栈动态阵列相比,堆栈动态阵列的优势在于灵活性。在即将使用数组之前,不需要知道数组的大小。

  • 固定堆动态数组:类似于固定堆栈动态数组,在分配存储后,下标范围和存储绑定都是固定的。不同之处在于,下标范围和存储绑定都是在执行期间用户程序请求它们时完成的,并且存储是从堆而不是堆栈分配的。固定堆动态数组的优点是灵活性——数组的大小总是适合这个问题。缺点是来自堆的分配时间比来自堆栈的分配时间长。

  • 堆动态数组:是一个下标范围和存储分配的绑定是动态的,并且可以在数组的生存期内更改任意次数。堆动态数组相对于其他数组的优势在于灵活性:数组可以在程序执行过程中随着空间需求的变化而增长和收缩。缺点是分配和解除分配需要更长的时间,并且可能在程序执行期间发生多次。以下各段列举了这五个类别的例子。

Scala语言正在使用以下哪种类型的矩阵

Scala和Java都在基元数组上使用fixed heap-dynamic array。有一些类,如Java的Vector和Scala的ArrayBuffer,它们构建在基元上,以提供heap-dynamic array的特性。

最新更新