Array和list的区别

18 阅读2分钟

Array and List 的区别

Array:有序,数组:元素在空间上连续。通过下标去访问元素会特别快!

List:有序,链表:元素在空间上不连续

两种类型:可变,不可变

  • 不可变:一个数组创建之后,不能添加,不能删除!

常用的方法:添加,删除,查找,循环,排序,......

不可变不能直接添加元素,会报错
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)
}

  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个元素,ArrayIndexOutOfBoundsException:
  }

添加,删除,修改,判断是否存在,求和

  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))
    println(arr1.contains(8))

    println(arr1.sum) // 求和
    
    arr1.foreach(ele=> println(ele))
  }

排序,切片,过滤,搜索位置

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(a => a>0)

  // 搜索位置:检查某个元素的下标
  val target = -2
  val result = arr1.indexOf(-1) // 如果没有找到这个元素,就返回 -1

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


  arr4.foreach(ele=> println(ele))
}
case class DreamItem(content:String,isDone:Boolean,deadLine:String,prior:Int)
  def main(args: Array[String]): Unit = {
    val Dream1 = DreamItem("能够当一位大厨",false,"2027,3,3",1)
    val Dream2 = DreamItem("瘦到170斤",false,"2027-2-10",2)
    val Dream3 = DreamItem("把专业学好",false,"2027-6-3",3)

    val arr1 = scala.collection.mutable.ArrayBuffer(Dream1,Dream2,Dream3)



    arr1(1) = arr1(1).copy(isDone = true)

    arr1(1) = arr1(1).copy(prior = 0)
    val orderList = arr1.sortBy(_.prior)

    val newList = orderList.slice(0,2)

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