Scala数组、区间与集合详解:不可变与可变的对比

5星 · 超过95%的资源 0 下载量 185 浏览量 更新于2024-08-29 收藏 48KB PDF 举报
在Scala编程语言中,数组集合是数据结构的重要组成部分,它们为处理和操作一系列有序的数据提供了便利。本文主要介绍了Scala中的三种核心集合类型:数组(Array)、区间(Range)和向量(Vector),以及另一种非数组形式的迭代器(Iterator)和不可变集合(List)。这些集合各有特点,适用于不同的场景。 **1. 数组(Array)** Scala中的数组是一种固定大小的、连续的内存结构,可以通过索引进行访问和修改。创建数组时,可以使用伴生对象或`new Array`。例如: - 使用伴生对象创建数组:`var a1 = Array(1, 2, 3, 5, 4)` - 创建指定长度且所有值为0的数组:`var a2 = new Array[Int](5)` - 获取数组长度:`a1.length` 或 `a2.size` - 修改数组元素:`a1(1) = -1` 或 `a1.update(1, -2)` - 遍历数组:`for (i <- a1) println(i)` **2. 区间(Range)** Range在Scala中表示一个有序的数值序列,通常是只读的,不能直接修改其值。可以通过构造函数创建,如`new Range(start, end, step)`: - 示例:`var r1 = new Range(0, 10, 3)` 或 `var r2 = 0.to(10).by(3)` - 访问区间内的特定值:`r1(2)`(6) - 注意:区间是不可修改的,尝试修改值会出错:`r1(2) = 12` 抛出异常 - 遍历区间:`for (i <- r1) println(i)` **3. 向量(Vector)** Vector是Scala中的动态数组,支持高效的插入和删除操作,但索引访问和修改需谨慎,因为它们通常会导致向量的重新分配。创建向量的方法: - `var v1 = Vector(1, 2, 3)` - 通过生成器表达式创建:`var v2 = for (i <- 0 to 10 by 3) yield i` - 向量提供安全的索引访问:`v1(0)`(1),但修改元素受限:`v1(2) = 12` 抛出异常 - 遍历向量:`for (i <- v1) println(i)` - 获取向量长度:`v1.length` **4. 迭代器(Iterator)** Iterator是一种延迟求值的集合,它提供了一种遍历集合的方式,但不支持随机访问。创建迭代器: - `var it = Iterator(1, 2, 3)` - 只能遍历一次:`for (i <- it) println(i)` - 遍历后,集合可能被清空:`it.size` 或 `it.length` - 检查迭代器是否为空:`val flag = it.isEmpty` **5. 不可变集合 - List** List是Scala中的不可变集合,每个操作都会返回一个新的列表,保持原列表不变。创建和操作List的方法: - `var list = List(1, 2, 5, 3, 2)` - 添加元素:`list.::(10)` 或 `list.+:(11)` 创建新列表 - 追加元素:`list.:::(List(7, 8, 9))` 创建新列表 - 删除元素:`list.drop(3)` 或 `list.dropRight(3)` 创建新列表 - 删除满足条件的元素:`list.dropWhile(item => item < 5)` 创建新列表 - 获取列表部分元素:`list.head`, `list.last`, 或 `list.tail` 总结来说,Scala中的数组、区间、向量和迭代器以及List都是数据存储和处理的不同方式,各有优缺点。理解并灵活运用这些集合类型有助于编写高效、可维护的Scala代码。