目录


1. 定长数组

1. 初始化定长数组

 1. 初始化一个长度为 5 的定长数组,所有元素值均为 0。

注意:如果 new,相当于调用了数组的 apply 方法,直接为数组赋值。

val arr = new Array[Int](5)

// 打印定长数组,内容为数组的 hashcode 值
println(arr)            // [I@27c20538

2. 初始化一个长度为 8 的定长数组。

val arr = Array[Int](8)
println(arr)            // [I@10bdf5e5

 3. 初始化一个长度为 3 的定长数组。

val arr = Array("hello", "hi", "spark")

//使用() 访问元素
println(arr(2))            // spark

2. 转换成数组缓冲

.toBuffer 会将数组转换成数组缓冲,可以打印原数组中的内容。

var arrBuffer = arr.toBuffer
println(arrBuffer)         // ArrayBuffer(hello, hi, spark)

 

2. 变长数组(数组缓冲)

1. 使用数组缓冲

需要导入 import scala.collection.mutable.ArrayBuffer。

import scala.collection.mutable.ArrayBuffer
...

val arr = ArrayBuffer[Int]()        // ArrayBuffer()

2. 追加

向数组缓冲的尾部追加一个元素

// +=尾部追加元素,arr4 += 1, +=(,) 追加多个元素
arr += (2, 3, 4, 5)            // ArrayBuffer(2, 3, 4, 5)

追加一个数组 ++=,结果仍然是ArrayBuffer。

arr ++= Array(6, 7)            // ArrayBuffer(2, 3, 4, 5, 6, 7)

追加一个List ++=

arr ++= List(8, 9)            // ArrayBuffer(2, 3, 4, 5, 6, 7, 8, 9)

追加一个数组缓冲

arr ++= ArrayBuffer(10, 11)     // ArrayBuffer(2, 3, 4, 5, 6, 7, 8, 9, 10, 11)

3. 插入

在数组某个位置插入元素用 insert(index,value,value..)。

// 在首部插入 -1 和 0
arr.insert(0, -1, 0)        // ArrayBuffer(-1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)

4. 删除

删除数组某个位置的元素用 remove(index,value,value..)

// 删除index=8开始的2个元素
arr.remove(8, 2)        // ArrayBuffer(-1, 0, 2, 3, 4, 5, 6, 7, 10, 11)

5. 截断

// 截断尾部2个元素
arr.trimEnd(2)        // ArrayBuffer(-1, 0, 2, 3, 4, 5, 6, 7)

// 截断前3个元素
arr.trimStart(3)      // ArrayBuffer(3, 4, 5, 6, 7)

6. 转成定长数组

var arr2 = arr.toArray

 

3. 遍历数据

1、 增强 for 循环

for(i <- arr)
println(i)

2、 to 

// 0 to 10,包含0 包含10
for(i <- (0 to arr.length - 1))
println(arr(i))


3、 until 会生成索引

// 0 until 10,包含0不包含10,until 会生成一个 Range,reverse将生成的 Range 反转
for(i <- (0 until arr.length).reverse)
println(arr(i))

// 步长间隔为 2,
for(i <- (0 until (arr.length, 2)))
println(arr(i))
// 1 
// 3
// 5
// 7


4. 数组转换

使用yield 关键字将原始的数组进行转换会产生一个新的数组,原始的数组不变。或者 filter + map。

// 定义一个数组
val arr = Array(1, 2, 3, 4, 5, 6, 7, 8)

// 将偶数取出乘以 10 后再生成一个新的数组
val arr2 = for (e <- arr if e % 2 == 0) yield e * 10
println(arr2.toBuffer)

// filter 过滤,接收一个返回值为 boolean 的函数
// map 相当于将数组中的每一个元素取出来,应用传进去的函数
val arr3 = arr.filter(_ % 2 == 0).map(_ * 10)
println(arr3.toBuffer)

 

5. 数组常用算法

// 定义一个数组
val arr = Array(1, 2, 3, 4, 5, 6, 7, 8)

// 求和
arr.sum            // 36

// 最大值
arr.max            // 8

// 最小值
arr.min            // 1

// toString
arr.toString()     // [I@5ce81285

// 指定分隔符
arr.mkString(",")        // 1,2,3,4,5,6,7,8

arr.mkString("<",",",">")        // <1,2,3,4,5,6,7,8>

 

6. 多维数组

var arr = Array(Arra(1,2,3),Array(2,3,4))

arr(0)(1)        // 2

for(i <- arr)
println( i .mkString(","))
// 1,2,3
// 2,3,4