scala教程:可变数组

介绍

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(",")) // 新数组有新添加的元素
}

原文出处:/show_1IX1DgbLcQlR.html