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))
    }
  }
相关推荐
一只小bit32 分钟前
C++之初识模版
开发语言·c++
王磊鑫1 小时前
C语言小项目——通讯录
c语言·开发语言
钢铁男儿1 小时前
C# 委托和事件(事件)
开发语言·c#
Ai 编码助手2 小时前
在 Go 语言中如何高效地处理集合
开发语言·后端·golang
小丁爱养花2 小时前
Spring MVC:HTTP 请求的参数传递2.0
java·后端·spring
喜-喜2 小时前
C# HTTP/HTTPS 请求测试小工具
开发语言·http·c#
ℳ₯㎕ddzོꦿ࿐2 小时前
解决Python 在 Flask 开发模式下定时任务启动两次的问题
开发语言·python·flask
一水鉴天2 小时前
为AI聊天工具添加一个知识系统 之63 详细设计 之4:AI操作系统 之2 智能合约
开发语言·人工智能·python
Channing Lewis2 小时前
什么是 Flask 的蓝图(Blueprint)
后端·python·flask
apz_end2 小时前
埃氏算法C++实现: 快速输出质数( 素数 )
开发语言·c++·算法·埃氏算法