scala中的Array

21 阅读2分钟

1.Array的定义

  • Array 是一种在 Scala 中用于存储固定大小、相同类型元素的数据结构。它在内存中是连续存储的,这使得访问元素的速度非常快。

  • 类型有两种:Array表示长度不可变的数组 和 ArrayBuffer表示长度可变的数组

/**
 * Array 和List的区别
 *
 * Array:有序,数组: 元素在空间上连续。通过下标去访问元素会特别快
 * List:有序, 链表:元素在空间上不连续
 *
 *
 * 两种类型:  可变,  不可变
 *        不可变:一个数组创建之后,不能添加,不能删除!
 *
 * 常用的方法: 添加,删除,查找,循环,排序,......
 */
object array01 {

  def main(args:Array[String]):Unit = {
    //可变数组
    val arr1 = scala.collection.mutable.ArrayBuffer(1,2,3);
    //可以直接添加元素
    arr1 += 4
    println(arr1)

    //不可变数组
    val arr2 = Array(1,2,3)
    //不可变,不能直接添加元素
    //arr2 += 4  //报错
    println(arr2)
  }

}

2.不可变数组

  • Array表示长度不可变的数组,一旦定义之后,不能再增加,删除元素
object array02 {

  def main(args:Array[String]):Unit = {
    Array(1,2,3)
//    val arr = Array.range(1,100)
//    arr.foreach(println) //1-99
//    val arr1 = Array.range(1,100,3)  //3  步长
//    arr1.foreach(println) //1-99

    val arr1 = Array(1,2,3)
    //访问数组元素
    println(arr1(0))  //第一个元素
    println(arr1(2))  //第三个元素
    println(arr1(20))  //报错:数组越界! 第21个元素, java.lang.ArrayIndexOutOfBoundsException
  }
}

3.可变数组

  • Array表示长度不可变的数组,一旦定义之后,不能再增加,删除元素
object array03 {

  def main(args:Array[String]):Unit = {

    //可变数组
    val arr1 = scala.collection.mutable.ArrayBuffer(1,2,3)
    //添加
    arr1 += 4

    arr1 += (5,6,7)

    //删除
    arr1 -= 4
    //删除某个下标上的元素
    //arr1.remove(0)
    arr1.remove(0,3) //从指定位置开始删除,删除几个?

    //修改
    arr1(2) = 700

    //判断是否存在?
    println(arr1.contains(6))  //true
    println(arr1.contains(8))  //false

    //求和
    println(arr1.sum)  //求和

    //循环
    arr1.foreach(ele => println(ele))
  }
}

4.数组常用方法

object array04 {

  def main(args:Array[String]):Unit = {

    //可变数组
    val arr1 = scala.collection.mutable.ArrayBuffer(-1,20,3)

    //排序
    val arr2 = arr1.sortWith((a,b)=>a>b)

    //切片:只取整个数组中的某个部分 slice
    val arr3 = arr1.slice(0,3)

    //过滤
    val arr4 = arr1.filter(x => x>0)

    //搜索位置:检查某个元素的下标

    val target = -2
    val result = arr1.indexOf(target) //如果没找到这个元素,家返回-1

    println(s"-1的下标是 ${result}")


    arr4.foreach(ele=>println(ele))
  }
}

5.实训内容

任务背景:梦想清单管理。

1. 使用case class 定义DreamItem类。它的属性有:内容,是否完成,截止日期,优先级。

2. 定义可变Array来保存DreamItem。

3. 添加3个梦想

4. 将第2个梦想设置为已完成。

5. 调高第3个梦想的优先级

6. 根据优先级进行从高到低排序

7. 把优先级排名前5的梦想保存到一个新的列表中

8. 循环输出梦想列表

object array05 {
  case class DreamItem(content:String, isDone:Boolean, deadline:String, prior:Int)

  def main(args: Array[String]): Unit = {
    val dream1 = DreamItem("学习Scala", false, "2026-6-6", 1)
    val dream2 = DreamItem("阅读书籍", false, "2026-12-11", 2)
    val dream3 = DreamItem("健身计划", false, "2026-3-6", 3)

    val dreamList = scala.collection.mutable.ArrayBuffer(dream1, dream2, dream3)

    // 4
    dreamList(1) = dreamList(1).copy(isDone=true)

    // 5
    dreamList(2) = dreamList(2).copy(prior=0)

    // 6
    val orderList = dreamList.sortBy(_.prior)

    // 7
    val newList = orderList.slice(0, 2)

    // 8
    newList.foreach(ele => {
      println("------------------------------")
      println(s"内容: ${ele.content}")
      println(s"状态: ${if(ele.isDone) "完成" else "未完成"}")
      println(s"截止日期: ${ele.deadline}")
      println(s"优先级: ${ele.prior}")
      println("------------------------------")
      println()
    })
  }
}