Array

17 阅读2分钟

Array 与 List 的区别

  • Array: 有序, 数组, 元素在空间上连续,通过下标访问元素会特别的快!
  • List: 有序, 链表, 元素在空间上不连续
  • 两种类型: 可变, 不可变
  • 不可变: 一个数组创建之后, 不能添加, 不能删除!
  • 常用的方法: 添加, 删除, 查找, 排序, 切片, ......
object array01 {
  def main(args: Array[String]): Unit = {
    // 可变数组
    val arr = scala.collection.mutable.ArrayBuffer(1,2,3)
    //可以直接添加元素
    arr1+=4
    println(arr1)
    //不可变数组
    val arr2=Array(1,2,3)
    //不可变,不能直接添加元素
    //arr2+=4//报错
    println(arr2)
  }
}
package iterator
object array02 {
  def main(args: Array[String]): Unit = {
//   Array(1,2,3)
//    val arr=Array.range(1,100)
//    arr.foreach(println())
//    val arr1=Array.range(1,100,3)
//    arr1.foreach(println())
    val arr1=Array(1,2,3)
    //访问数组元素
    println(arr1(0))
    println(arr1(2))
    println(arr1(20))//报错:数组越界!第21个元素
  }
}

常用的方法:

1.添加 2.删除 3.查找 4.排序 5.切片, ......


object array02 {
  def main(args: Array[String]): Unit = {
    // 可变数组
    val arr1 = scala.collection.mutable.ArrayBuffer(1,2,3)
    //添加
    arr1 += 4
    arr1 ++= (5,6,7)
    // 追加
    arr1.append(8)
    // 删除第一个元素
    //arr1.remove(0)
    arr1.remove(3, 1) // 从指定位置开始删除,删除几个?
    // 修改
    arr1(2) = 700

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

    println(arr1.sum) // 求和

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

题目:

  1. 使用 case class 定义 DreamItem 类。它的属性有:内容,是否完成,期,优先级。
  2. 定义可变 Array 来保存 DreamItem。
  3. 添加 3 个梦想
  4. 将第 2 个梦想设置为已完成。
  5. 调高第 3 个梦想的优先级
  6. 根据优先级进行从高到低排序
  7. 把优先级排名前 5 的梦想保存到一个新的列表中
  8. 循环输出梦想列表
package iterator

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

def main(args: Array[String]): Unit = {
  val dream1 = DreamItem("学英语", false, "2025-06-1", 1)
  val dream2 = DreamItem("读书", false, "2025-12-11", 2)
  val dream3 = DreamItem("健身", false, "2025-3-4", 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(s"---${ele.content}---")
    println(s"内容:${ele.content}")
    println(s"状态:${ele.isDone match { case true => "已完成" case false => "未完成" }}")
    println(s"截止日期:${ele.deadline}")
    println(s"优先级:${ele.prior}")
    println()
  })
}
}