array

66 阅读1分钟
package array

/**
 * 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)
  }
}
package array
object array02 {
  def main(args: Array[String]): Unit = {
    // 可变数组
    val arr1 = scala.collection.mutable.ArrayBuffer(1,2,0,-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"${target}的下标是 ${result}")

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

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

  def main(args: Array[String]): Unit = {
    val dream1 = DreamItem("", 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 oderList = dreamList.sortBy(_.prior)

    // 7
    val newList = oderList.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()
    })
  }
}