Scala中的集合包括Seq序列、Set组、Map映射,Seq包含了有索引的数组(Array、ArrayBuffer)和无索引的列表(List、ListBuffer)。
不可变集合指的是集合对象的存放地址、集合大小与类型、占用内存空间不可修改,只可以修改元素。若增删元素,则每次增删后会产生新对象,原有对象不会改变
可变集合指的是集合对象的存放地址、集合大小与类型、占用内存空间都可以修改,每次修改后不会产生新对象。对可变集合的操作尽量不要重新赋予新变量,因为新变量改变后,原变量也会随之改变。
可变集合包:scala.collection.mutable
不可变集合包:scala.collection.mutable
一、数组
数组就是常见的下标与元素一一对应的集合,即有索引的Seq。数组也分为可变与不可变,都用new关键字创建
new Array/ArrayBuffer[type](length)不可变数组是Array,可变数组是ArrayBuffer,可变数组的长度可以不定义
1、不可变数组
创建长度为5的整数型数组,并访问、修改元素
object Main {
def main(args:Array[String])=
{
//空数组
val arr1 = new Array[Int](5)
//值数组
val arr2 = Array(1,2,4,3,6)
//访问数组第一个元素
println(arr2(0))
//修改并访问数组第2个元素
arr2(1) = 8
println(arr2(1))
}
}
遍历数组所有元素
object Main {
def main(args:Array[String])=
{
//直接遍历
for (i <- arr2) println(i)
//调用foreach方法
arr2.foreach(println)
//角标遍历
for (j <- 0 until arr2.length) println(arr2(j))
for (m <- arr2.indices) println(arr2(m)) //indices相当于数组所有角标组成的序列
//迭代器,存在下一个则输出
val iter = arr2.iterator
while (iter.hasNext)
println(iter.next())
//输出所有元素组成的字符串
println(arr2.mkString(" "))
}
}
增加元素产生新对象
调用方法:最后边新增:+、最前边新增+:
object Main {
def main(args:Array[String])=
{
val arr2 = Array(1,2,4,3,6)
//在最前面加元素
val newarr = arr2.+:(8)
val newarr1 = arr2.+:(8).+:(9)
val newarr6 = 1 +: arr2 //方法调用的圆点可以省略,等同于数组、方法、新增元素用空格隔开。方法以:结尾时,右边往前调用的,也就是数组要在方法右侧,新增元素在方法左侧
println(newarr.mkString("-"))
println(newarr1.mkString("-"))
println(newarr6.mkString("-"))
//在最后边加元素
val newarr2 = arr2.:+(7)
val newarr3 = arr2.:+(0).:+(6)
val newarr7 = arr2 :+ 2 //方法调用的圆点可以省略,等同于数组、方法、新增元素用空格隔开
println(newarr2.mkString("-"))
println(newarr3.mkString("-"))
println(newarr7.mkString("-"))
//同时在前后加元素
val newarr4 = arr2.:+(1).:+(2).+:(3).+:(4)
val newarr5 = 1 +: 2 +: arr2 :+ 3 :+ 4
println(newarr4.mkString("-"))
println(newarr5.mkString("-"))
}
}
2、可变数组
创建数组,访问、修改元素同不可变数组
object Main extends App {
import scala.collection.mutable._
//创建空数组
val arr:ArrayBuffer[Int] = new ArrayBuffer[Int]()
//创建值数组
val newarr = ArrayBuffer(1,2,3)
println(ar