这一节主要介绍Scala中的数据结构:
- Seq
- Set
- Map
集合特质
scala同时支持可变集合和不可变集合,不可变集合从不可变,可以安全的访问
两个主要的包
- 不可变集合:scala.collection.immutable
- 可变集合 :scala.collection,mutable
scala优先采用不可变集合,集合主要分为三大类:序列(seq),集(set),映射(map)
- seq 是一个有先后次序的值得序列,IndexedSeq能够通过整形下标快速得访问元素
- Set是一个没有先后次序得值集合,在SortedSort中,元素以某种形式排过序的顺序被访问。
- Map是一组键值对偶,Sorted按照键的排序访问其中的实体
每个Scala集合特质或者类都带有一个Apply方法的伴生对象(类似于静态方法),这个apply方法可以用来构建该集合中的实体,这是统一创建原则.
Seq
数组Array
下面的命令在命令行进入scala测试:
// 定长数组
val nums = new Array[Int](10)
val s = Array("Hello", "World")
s(0) = "Goodbye"
s
// 变长 数组缓冲
import scala.collection.mutable.ArrayBuffer
val b = ArrayBuffer[Int]()
val b2 = new ArrayBuffer[Int] // If you use new, the () is optional
b += 1
b += (1, 2, 3, 5)
b ++= Array(8, 13, 21)
// 删除最后5个元素
b.trimEnd(5)
b
// 在第三个位置插入6
b.insert(2, 6)
b
// 在第三个位置插入 7、8、9
b.insert(2, 7, 8, 9)
b
// 删除第三个元素
b.remove(2)
b
// 删除从第三个位置开始的3个元素
b.remove(2, 3)
b
// 变长数组与不变数组之间的转换
val a1 = b.toArray
a1.toBuffer
// 数组遍历
val a = Array(1, 1, 2, 3, 5, 8, 13, 21, 34, 55)
// 下标访问
for (i <- 0 until a.length)
println(i + ": " + a(i))
// 产生一个Range
0 until a.length
// 产生一个Range,以2为间隔
0 until (a.length, 2)
// Range倒转
(0 until a.length).reverse
// a 遍历
for (elem <- a)
println(elem)
// a 索引
for (i <- a.indices)
println(i + ": " + a(i))
多维数组
// 多维数组 3行4列
val matrix = Array.ofDim[Double](3, 4) // An array of arrays
val row = 0
val column = 2
matrix(0)(2) = 17.29
matrix.length
matrix(row) // An array
matrix(row).length
val triangle = new Array[Array[Int]](10)
for (i <- triangle.indices)
triangle(i) = new Array[Int](i + 1)
triangle(0)(0) = 1
for (i <- 1 until triangle.length) {
triangle(i)(0) = 1
triangle(i)(i) = 1
for (j <- 1 until triangle(i).length - 1)
triangle(i)(j) = triangle(i - 1)(j - 1) + triangle(i - 1)(j)
}
for (row <- triangle) {
for (elem <- row) print(el