Scala 的Array 和 ArrayBuffer 集合

下面主要对Array和ArrayBuffer这两种相对应的集合进行介绍,通过可变数组与多维数组的理论知识结合相关案例深入分析Array和ArrayBuffer的应用。

  1. Scala 的 Array

Scala的Array表示长度不可变的数组,Array与Java中的大部分功能相同。Scala中的Array[T]对应 Java中的TU],例如Array[String]对应Stringl]。Scala的Array与Java中的不同点为Scala中的Array可以作为序列使用,通过隐式转换的方式把Scala中的数组转换成序列。

Scala中定义数组的四种方式如下:

第一种方式:new Array[T](n)。T表示定义数组的类型,n表示指定数组的长度。

第二种方式:Array。例如定义 Array(1,2,3)数组。

第三种方式:利用数组中的方法。例如可以使用Rang填充数组。

第四种方式:其他集合转换。例如List.toArray表示把List集合转换成数组。

2.Scala的ArrayBuffer

Scala中的ArrayBuffer定义方式同样有多种,这里主要介绍两种。

第一种方式:ArrayBuffer。

第二种方式:new ArrayBuffer。

当定义一个不可变数组时会传递一个数组的长度,表示数组长度不可变。当定义可变数组时,可以不传递数组的长度,Scala会分配一个默认的长度。当长度不够时,ArrayBuffer还会自动扩展。一般情况下会指定一个初始长度,对数组进行预判。

关于可修改的ArrayBuffer,相关代码如下:

Scala 复制代码
import scala.collection.mutable.ArrayBuffer
//Array:数组
//可修改的:ArrayBuffer
//不可修改的:Array
object Test {
  //可修改的:ArrayBuffer
  def main(args: Array[String]): Unit = {
    //1.新建
    val arr1 = ArrayBuffer(1,2,3)
    //2.添加
    arr1 += 4
    arr1.insert(0,100)
    //3.删除
    arr1 -= 3 //删除指定的元素
    arr1.remove(0) //删除指定位置(下标)的元素
    //4.修改。通过下标来修改
    arr1(0) = 50 //把下标为0的元素赋值为50

//    注意,下标不能越界。有效的范围是:0 - 长度-1
    println(arr1.length)//length 长度,用来获取元素的个数
    //println(arr1(10)) //IndexOutOfBoundsException
    //5.查询
    //5.1 判断某个元素在数组中是否存在
    println(s"50在数组中吗? ${arr1.contains(50)}")
    //5.2 找到指定元素的下标
    //     -1:表示这个元素在数组中不存在!
    println(s"500在数组中的下标是: ${arr1.indexOf(500)}")
    //6.遍历
//    for,foreach,iterator
    for(i <- arr1) println(i)
    println("-"*50)
    arr1.foreach(println)
    println("-"*50)
    val it1 = arr1.iterator
    while (it1.hasNext){
      println(it1.next())
    }
  }
}

关于不可变的Array,相关代码如下:

Scala 复制代码
object Test {
  //不可变Array:长度不可变
  def main(args: Array[String]): Unit = {
    val arr1 = Array(1,2,3,4,5,6)
    arr1(0) = 100
//    arr1.foreach(println)

    //数组的常用方法(对于可变和不可变的数组都可以使用)
    //1.截取,从源数组中,取一部分,组成一个新数组
//    arr1 .slice(起点下标,终点下标-不包括)
    val arr2 = arr1.slice(2,5)
    arr2.foreach(println)
    //2.遍历.foreach
    //3.映射 map
    //Array(1,2,3)------>Array(2,4,6)
    val arr3 = Array(1,2,3).map(e=>e*2)
    arr3.foreach(println)//(2,4,6)
    //4.过滤 filter
    println("_"*50)
    //留下奇数,组成一个新的数组
    val arr4 = Array(2,3,4,5,6).filter(e => e%2==1)
    arr4.foreach(println)
    //5.折叠 reduce
    println(Array(1,2,3,4).reduce((a,b)=>a+b))

    println("_"*50)
    }
  }

3.Scala的多维数组

Scala中定义多维数组的方式为ofDim方法和Array(Array1,Array2,..,Arrayn)方法。使用ofDim方法时需要传递参数,即Array.ofDim(x,y),表示传递一个x行y列的数组。通过Array(Array1,Array2,..,Arrayn)方式可以静态地把数组中的元素定义为数组,例如Array(Array(0,2),Array(3,4))。动态添加多维数组时需要使用var定义数组。

下面举例说明Scala的数组和多维数组的常用操作。

相关代码如下:

Scala 复制代码
object Test {
  def main(args: Array[String]): Unit = {
    //多维数组
    val arr5 = Array(Array(1,2,3),
                     Array(4,5,6),
                     Array(7,8,9))
    //9
    println(arr5(2)(2))
    //4
    println(arr5(1)(0))

    //创建二维数组
//    val arr6 = Array.ofDim[Int](3,3,3)
//    arr6(0)(0)(0) = 1

    //由一维数组转化得到二维数组
    val arr6 = Array(1,2,3,4,5,6).grouped(3)//对数组中的元素,3个一组,升级为二维数组
    while (arr6.hasNext){
      val rs = arr6.next()
      println(rs(0))
    }
  }
相关推荐
霍夫曼vx_helloworld73529 分钟前
(二)手势识别——动作模型训练【代码+数据集+python环境(免安装)+GUI系统】
开发语言·python
誓约酱12 分钟前
Linux 下进程基本概念与状态
linux·运维·服务器·开发语言·c++
学习前端的小z14 分钟前
【C语言】深入剖析 C 语言中数组与指针的紧密联系及高效应用
c语言·开发语言
神仙别闹14 分钟前
基于Python实现三种不同类型BP网络及分析
开发语言·python
Code_Artist20 分钟前
细说Linux操作系统的网络I/O模型
linux·后端·网络协议
喵呜角角22 分钟前
QML TableView(Qt_6_5_3_MinGW_64)
开发语言·qt·qml·qt quick
怀旧66632 分钟前
Java List 集合
java·数据结构·后端·list·个人开发
Peter_chq33 分钟前
【计算机网络】多路转接之poll
linux·c语言·开发语言·网络·c++·后端·poll
AskHarries33 分钟前
异步校验工具 awaitility 快速入门
后端
studyer_domi44 分钟前
matlab蜗轮蜗杆设计优化问题
开发语言·matlab