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))
    }
  }
相关推荐
[email protected]41 分钟前
ASP.NET Core SignalR的基本使用
后端·asp.net·.netcore
bubiyoushang8881 小时前
matlab雷达定位仿真
开发语言·matlab
yezipi耶不耶2 小时前
Rust入门之并发编程基础(一)
开发语言·后端·rust
bobz9652 小时前
cirros 慢的原因 checking http://169.254.169.254
后端
shangjg33 小时前
Kafka 如何保证不重复消费
java·分布式·后端·kafka
前端snow3 小时前
用cursor写一个微信小程序-购物网站实操
前端·javascript·后端
Mylvzi3 小时前
Spring Boot 中 @RequestParam 和 @RequestPart 的区别详解(含实际项目案例)
java·spring boot·后端
南瓜胖胖3 小时前
【R语言编程绘图-plotly】
开发语言·plotly·r语言
bobz9653 小时前
libvirt unix_sock_dir 控制三种 socket 所在目录
后端
@Turbo@4 小时前
【QT】在QT6中读取文件的方法
开发语言·数据库·qt