數組分爲可變數組ArrayBuffer和不可變數組Array。數組
Array是不可變數組,這裏的不可變是指對象的引用不能變,他的長度是固定的不能變的,可是他的元素倒是能夠更改的。
定義一個不可變數組:app
// 長度爲3的數字,默認都是0,[]裏是類型,()裏是長度 val arr1: Array[Int] = new Array[Int](3) // 直接定義數組的元素,這裏就是直接調用apply方法了 val arr2: Array[Int] = Array(1, 2, 3)
讀取、修改:scala
println(arr1(0)) // 0 println(arr2(0)) // 1 arr1(0) = 1 arr2.update(0, 11) println(arr1(0)) // 1 println(arr2(0)) // 11
轉爲字符串,並用-鏈接:code
println(arr2.mkString("-")) // 1-2-3
求最大值、最小值、求和:對象
println(arr2.sum) // 16 println(arr2.max) // 11 println(arr2.min) // 2
往前面或後面新增元素,因爲是不可變數組,因此返回的是新的數組。索引
.+:()
:方法,加號在前面,因此往前面加元素.:+()
:方法,加號在後面,因此日後面加元素+:
:符號,加號在前面,因此往前面加元素:+
:符號,加號在後面,因此日後面加元素val arr3 = arr2.+:(10).:+(4) println(arr3.mkString("-")) // 10-11-2-3-4 val arr4 = 8 +: 9 +: arr3 :+ 5 :+ 6 println(arr4.mkString("-")) // 8-9-10-11-2-3-4-5-6
遍歷數組:
until、to 、indices是取索引,而後經過索引取值。until和to的區別是to是等於數組的長度until是小於。
後面幾個都是直接取數組的元素。rem
for (i <- 0 until arr2.length) print(arr2(i) + "-") // 11-2-3- println() for (i <- 0 to arr2.length - 1) print(arr2(i) + "-") // 11-2-3- println() for (i <- arr2.indices) print(arr2(i) + "-") // 11-2-3- println() for (i <- arr2) print(i + "-") // 11-2-3- println() arr2.foreach((e: Int) => print(e + "-")) // 11-2-3- println() arr2.foreach(println) // 11 2 3
ArrayBuffer是可變數組,因此能夠對他進行新增、刪除等操做。字符串
// 長度爲3的數字,默認空,[]裏是類型,()裏是長度 var arr1: ArrayBuffer[Int] = new ArrayBuffer() var arr2: ArrayBuffer[Int] = ArrayBuffer(1, 2, 3) println(arr1) // ArrayBuffer() println(arr2) // ArrayBuffer(1, 2, 3)
讀取、修改,這個和不可變數組不同的是,因爲沒有初始值,因此不能讀取已經賦值。table
// println(arr1(0)) // error // arr1(0) = 1 // error println(arr2(0)) // 1 arr2(0) = 11 println(arr2(0)) // 11 arr2.update(0, 1) println(arr2(0)) //
轉爲字符串,並用-鏈接,求最大值、最小值、求和遍歷數組,這些同不可變數組,這裏不作演示。
向前或向後新增元素,包括方法和符號兩種:class
arr2.append(4) println(arr2.mkString("-")) // 1-2-3-4 arr2.appendAll(ArrayBuffer(5, 6)) println(arr2.mkString("-")) // 1-2-3-4-5-6 arr2.prepend(99) println(arr2.mkString("-")) // 99-1-2-3-4-5-6 arr2.prependAll(ArrayBuffer(97, 98)) println(arr2.mkString("-")) // 97-98-99-1-2-3-4-5-6 arr2 += 7 println(arr2.mkString("-")) // 97-98-99-1-2-3-4-5-7 arr2 += (8, 9) println(arr2.mkString("-")) // 97-98-99-1-2-3-4-5-6-7-8-9 arr2 ++= ArrayBuffer(10, 11) println(arr2.mkString("-")) // 97-98-99-1-2-3-4-5-6-7-8-9-10-11 arr2 :+= 12 println(arr2.mkString("-")) // 97-98-99-1-2-3-4-5-6-7-8-9-10-11 arr2 +:= 96 println(arr2.mkString("-")) // 96-97-98-99-1-2-3-4-5-6-7-8-9-10-11
指定位置新增元素:
arr2.insert(4, 100) println(arr2.mkString("-")) // 96-97-98-99-100-1-2-3-4-5-6-7-8-9-10-11-12 arr2.insertAll(5, ArrayBuffer(101, 102)) println(arr2.mkString("-")) // 96-97-98-99-100-101-102-1-2-3-4-5-6-7-8-9-10-11-12
刪除元素,能夠指定位置、指定位置+刪除長度、指定元素刪除:
arr2.remove(4) println(arr2.mkString("-")) // 96-97-98-99-101-102-1-2-3-4-5-6-7-8-9-10-11-12 arr2.remove(4, 2) println(arr2.mkString("-")) // 96-97-98-99-1-2-3-4-5-6-7-8-9-10-11-12 arr2 -= 96 println(arr2.mkString("-")) // 97-98-99-1-2-3-4-5-6-7-8-9-10-11-12 arr2 -= (97, 98, 99) println(arr2.mkString("-")) // 1-2-3-4-5-6-7-8-9-10-11-12
不可變數組和可變數組直接是能夠轉換的。好比下面的例子中,arr3是Array類型的,經過toBuffer方法轉換爲Buffer的arr4,arr4經過toArray方法轉爲Array的arr5
val arr3 = new Array[Int](4) val arr4: mutable.Buffer[Int] = arr3.toBuffer val arr5: Array[Int] = arr4.toArray