介绍
scala 中的数组分两种,不可变 和 可变数组,这里只介绍 可变数组
使用起来与java中的 List 类似,可直接对原对象操作: 添加元素,也可以 删除元素,不会返回新对象
定义语法
方式一
val arr:ArrayBuffer[Int]=new ArrayBuffer[Int]()
解释:
new:是关键字[Int]:相当于java中的泛型,可以存放的Int类型
如果希望存放任意数据类型,则指定Any
含义: 创建一个数组,只能存放 Int 类型的数据
注意: 创建 可变数组 后,其 长度是0,即:数组是空的
println( arr.length)
显示 0
方式二
通过伴生对象创建数组
val arr2:ArrayBuffer[Int]=ArrayBuffer[Int](1,2,30,400)
解释:
ArrayBuffer:伴生对象,全写是:val arr2=ArrayBuffer.apply[Int](1,2,3)[Int]:相当于java中的泛型,可以存放的数据类型,如果希望存放任意数据类型,则指定Any(1,2,30,400):数组中的元素,定义数组时直接赋初始值
例子
def main(args: Array[String]): Unit = {
val arr:ArrayBuffer[Int]=new ArrayBuffer[Int](10)
val arr2:ArrayBuffer[Int]=ArrayBuffer[Int](1,2,30,400)
println("arr:"+arr.mkString(",")) // 与不可变数组不同,动态数组是空的
println("arr2:"+arr2.mkString(",")) //
}
索引
相当于 编号 ,数组中的每一个元素,都会有一个编号,从0开始
注意: 索引从0开始
访问数组中的元素
通过索引访问,索引从 0 开始,也就是说索引是0,表示数组中的第1个元素
语法
数组名(索引)
注意: 与C、JAVA不同,scala用的是小括号 (),底层实现是 ArrayBuffer 类的 apply() 方法
例子
println(arr(0))
注意:方式一 创建的数组
用方式一创建的数组,数组是空的,长度是0,所以创建后不能访问,否则报 数组越界的 错误
数组越界
如果当前数组只有5个元素,但访问第6个元素,就会报错,错误是 数组越界
即:访问不存在的元素,就会报 数组越界
修改数组中的值
通过索引修改
语法
数组名(索引) = 值
例子
arr(0) = 7
注意:方式一创建的数组
用方式一创建的数组,数组是空的,长度是0,所以不能修改值,否则报 数组越界的 错误
数组的长度属性
通过 数组名.length 获取数组的长度,Int类型
def main(args: Array[String]): Unit = {
val arr=new Array[Int](10)
println(arr.length)
val arr2=Array[Int](1,2,3)
println(arr2.length)
}
在尾部添加元素
语法
数组名.append(元素1,元素2...)
例子
def main(args: Array[String]): Unit = {
val arr2:ArrayBuffer[Int]=ArrayBuffer[Int](1,2,30,400)
arr2.append(500,600)
println("arr2:"+arr2.mkString(",")) //
}
在头部添加元素
语法
数组名.prepend(元素1,元素2...)
例子
def main(args: Array[String]): Unit = {
val arr2:ArrayBuffer[Int]=ArrayBuffer[Int](1,2,30,400)
arr2.prepend(500,600)
println("arr2:"+arr2.mkString(",")) //
}
插入元素
语法
数组名.insert(索引,元素1,元素2...)
例子
def main(args: Array[String]): Unit = {
val arr2:ArrayBuffer[Int]=ArrayBuffer[Int](1,2,30,400)
arr2.insert(2,500,600)
println("arr2:"+arr2.mkString(",")) //
}
添加数组
在尾部添加数组
将一个数组的所有元素,添加到另一个数组的尾部
数组名.appendAll(数组2)
在头部添加数组
将一个数组的所有元素,添加到另一个数组的头部
arr2.prependAll(arr)
插入数组
将一个数组的所有元素,插入到另一个数组的指定位置
数组名.insertAll(索引,数组2)
例子
def main(args: Array[String]): Unit = {
val arr:ArrayBuffer[Int]=ArrayBuffer[Int](1000,2000,3000)
val arr2:ArrayBuffer[Int]=ArrayBuffer[Int](1,2,30,400)
arr2.insertAll(3,arr)
println("arr2:"+arr2.mkString(",")) //
}
删除元素
方式一
数组名.remove(索引)
例子
def main(args: Array[String]): Unit = {
val arr:ArrayBuffer[Int]=ArrayBuffer[Int](1000,2000,3000)
arr.remove(1)
println("arr:"+arr.mkString(",")) //
}
方式二
根据元素值进行删除
数组名 -= 元素
如果能找到该元素就删除,如果找不到就不删除
例子
def main(args: Array[String]): Unit = {
val arr:ArrayBuffer[Int]=ArrayBuffer[Int](1000,2000,3000)
arr -= 2000 //如果能找到2000就删除,如果找不到就不删除
println("arr:"+arr.mkString(",")) //
}
方式三
数组名.remove(索引,n)
解释: 从索引开始删除,总共删除n个元素
例子
def main(args: Array[String]): Unit = {
val arr:ArrayBuffer[Int]=ArrayBuffer[Int](1000,2000,3000)
arr.remove(1,2) //从索引1开始删除,总共删除2个元素
println("arr:"+arr.mkString(",")) //
}
在尾部添加元素(符号方式)
语法一
将元素添加到数组中
数组名 += 元素
例子
def main(args: Array[String]): Unit = {
val arr:ArrayBuffer[Int]=new ArrayBuffer[Int](10)
arr += 1
println("arr:"+arr.mkString(",")) //
}
语法二(同不可变数组)
原数组不会变化,返回一个新数组,在新数组中包含添加的元素
val 新数组名 = 数组名.:+(元素)
例子
def main(args: Array[String]): Unit = {
val arr=Array[Int](1,2,300)
//添加元素,返回一个数组
val arr2=arr.:+(404)
println(arr.mkString(",")) // 原数组没有变化
println(arr2.mkString(",")) // 新数组有新添加的元素
}
语法三(同不可变数组)
原数组不会变化,返回一个新数组,在新数组中包含添加的元素
val 新数组名 = 数组名 :+ 元素
例子
def main(args: Array[String]): Unit = {
val arr=Array[Int](1,2,300)
//添加元素,返回一个数组
val arr2=arr :+ 404 :+ 405
println("原数组:"+arr.mkString(",")) // 原数组没有变化
println("新数组:"+arr2.mkString(",")) // 新数组有新添加的元素
}
在头部添加元素(符号方式)
语法一
元素 +=: 数组名
例子
def main(args: Array[String]): Unit = {
val arr:ArrayBuffer[Int]=new ArrayBuffer[Int](10)
arr += 1
200 +=: arr
println("arr:"+arr.mkString(","))
}
执行结果:
原数组:1,2,300
新数组:404,1,2,300
语法二(同不可变数组)
val 新数组名 = 数组名.+:(元素)
例子
def main(args: Array[String]): Unit = {
val arr=Array[Int](1,2,300)
//添加元素,返回一个数组
val arr2=arr.+:(404)
println("原数组:"+arr.mkString(",")) // 原数组没有变化
println("新数组:"+arr2.mkString(",")) // 新数组有新添加的元素
}
执行结果:
原数组:1,2,300
新数组:404,1,2,300
语法三(同不可变数组)
val 新数组名 = 元素 +: 数组名
或者
val 新数组名 = 元素1 +: 元素2 +: 数组名
例子
def main(args: Array[String]): Unit = {
val arr=Array[Int](1,2,300)
//添加元素,返回一个数组
val arr2=404 +: 405 +: arr
println("原数组:"+arr.mkString(",")) // 原数组没有变化
println("新数组:"+arr2.mkString(",")) // 新数组有新添加的元素
}