scala中的Array1

33 阅读2分钟

Scala 中的Array是一种定长、可变的同类型元素序列,底层直接映射为 Java 的数组(如scala.Array[Int]对应int[]scala.Array[String]对应String[]),属于 Scala 集合体系中 “原生数组” 范畴,区别于scala.collection.mutable.ArrayBuffer(变长数组)。

核心特性

  1. 定长性:创建时需指定长度,且长度不可动态修改,若需扩容需手动创建新数组并复制元素;

  2. 可变性:数组元素可通过索引直接修改(如arr(0) = 10),但引用本身为不可变(val arr = Array(1,2)arr指向的数组对象不可替换);

  3. 索引访问:支持 O (1) 时间复杂度的索引读写,索引从 0 开始,超出范围会抛出ArrayIndexOutOfBoundsException

  4. 类型安全:编译期严格检查元素类型,不允许混入不同类型(除非声明为Array[Any]);

  5. 操作方法:除继承 Java 数组的基础操作外,Scala 为Array扩展了丰富的高阶方法(如mapfilterfold等),可无缝衔接函数式编程;

  6. 创建方式

    • 字面量创建:val arr = Array(1, 2, 3)(编译器自动推断类型为Array[Int]);
    • 指定长度创建:val arr = new Array[Int](5)(初始值为对应类型的默认值,Int 为 0,String 为 null);
    • 范围创建:val arr = Array.range(1, 5)(生成 1,2,3,4)。

使用场景:适合元素数量固定、需高频随机访问、对性能要求较高的场景(如数值计算、底层数据存储),但灵活性低于变长集合。

Snipaste_2025-12-08_14-50-14.png

(一)Array的定义

Array 是一种在 Scala 中用于存储固定大小、相同类型元素的数据结构。它在内存中是连续存储的,这使得访问元素的速度非常快。

类型有两种:Array表示长度不可变的数组 和 ArrayBuffer表示长度可变的数组

(二)不可变数组

Array表示长度不可变的数组,一旦定义之后,不能再增加,删除元素。

我们主要学习它的:创建数组,访问元素,填充Array.range

1. 创建不可变数组

2. 访问元素: 注意不要越界。

3. 获取数组的长度:arr.length:获取数组的长度。

代码如下:

package array

object array01 {
//Array: 可变,不可变
//   不可变
//   scala.Array
//   可变
//scala.collection.mutable.ArrayBuffer
def main(args: Array[String]): Unit = {
  val arr1 = scala.Array(1,2,3)
  //arrr1 += 4; 不可变数组,不可添加

  val arr2 = scala.collection.mutable.ArrayBuffer(1,2,3)
  arr2 += 4 //可变数组,可以添加元素

  println(arr2)
  }
}

运行结果如下: Snipaste_2025-12-08_14-57-04.png

var arr2 = arr1.grouped(5)
var arr3 = arr2.toArray.map(_.toArray)