Scala中的数组分为了不可变的数组Array和可变数组ArrayBuffer。可变数组指的是长度不可变,内容可变。可变数组指的是长度和内容都可变。Scala中默认使用的是不可变数组,要使用可变数组,要先导入才能使用。
1. 不可变数组Array
定义方式一:
scala> val arr1=Array[Int](1,3,5,6,8)
arr1: Array[Int] = Array(1, 3, 5, 6, 8)
scala> val arr2=Array(2.6,5.8,9.99)
arr2: Array[Double] = Array(2.6, 5.8, 9.99)
从上面示例中可以看到,用这种方式定义数组时,可以指明数组类型,也可以不指定。不指定时会根据数据类型自动推断数组的类型。
定义方式二:
scala> val arr3=new Array[Int](5)
arr3: Array[Int] = Array(0, 0, 0, 0, 0)
使用此种方式定义时,必须指明数组类型和长度。定义的同时,会给各元素赋初值。
取值与赋值:
scala> arr1(0)
res3: Int = 1
scala> arr1(3)=10
scala> arr1(6)
java.lang.ArrayIndexOutOfBoundsException: 6
... 32 elided
取值与赋值都是使用数组的下标,下标索引从0开始。同样要注意下标越界的问题。
2. 可变数组ArrayBuffer
要使用可变数组,首先要导入:
scala> val ab=ArrayBuffer(1,2,3,4,5,6)
val ab=ArrayBuffer(1,2,3,4,5,6)
如果不导入直接使用,会报上述错误。
scala> import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.ArrayBuffer
scala> val ab=ArrayBuffer(1,2,3,4,5,6)
ab: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4, 5, 6)
scala> val ab2=new ArrayBuffer[Int]()
ab2: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()
从上例中可以看到,ArrayBuffer的定义同样可以采用两种形式。因为长度是可变的,所以采用第二种方式定义时,可以不用指定长度,只指明类型即可。
3. ArrayBuffer上的常用操作
添加一个或多个元素:
+=
添加集合:
++=
删除一个或多个元素:
-=
删除集合元素:
--=
插入元素: 第一个参数是下标,第二个参数是一个可变参数列表,支持同时插入多个值
(n:Int,ele:Int*)
删除元素:可以直接指定下标,还可以同时指定下标和要删除的元素个数
remove(n:Int)
remove(n:Int,count:Int)
清空集合:
clear
判空:
isEmpty
scala> ab
res8: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4, 5, 6)
scala> ab+=10
res9: ab.type = ArrayBuffer(1, 2, 3, 4, 5, 6, 10)
scala> ab+=(20,30)
res10: ab.type = ArrayBuffer(1, 2, 3, 4, 5, 6, 10, 20, 30)
scala> ab++=Array(5,6)
res11: ab.type = ArrayBuffer(1, 2, 3, 4, 5, 6, 10, 20, 30, 5, 6)
scala> ab-=1
res12: ab.type = ArrayBuffer(2, 3, 4, 5, 6, 10, 20, 30, 5, 6)
scala> ab-=(5,6)
res13: ab.type = ArrayBuffer(2, 3, 4, 10, 20, 30, 5, 6)
scala> ab--=Array(10,20,30)
res14: ab.type = ArrayBuffer(2, 3, 4, 5, 6)
scala> ab.(1,6,6,6)
scala> ab
res16: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(2, 6, 6, 6, 3, 4, 5, 6)
scala> ab.remove(3)
res17: Int = 6
scala> ab
res18: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(2, 6, 6, 3, 4, 5, 6)
scala> ab.remove(0,2)
scala> ab
res20: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(6, 3, 4, 5, 6)
scala> ab.isEmpty
res21: Boolean = false
scala> ab.clear
scala> ab.isEmpty
res23: Boolean = true