scala中的Array

29 阅读2分钟

Array 的定义

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

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

Array 与 List 的区别

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

不可变数组

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

我们主要学习它的一些常规操作:创建数组,访问元素,填充Array.range

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)
  }

}
object array02 {
  def main(args: Array[String]): Unit = {
    Array(1,2,3)
//    val arr = Array.range(1,100)
//    arr.foreach(println)          //1-99
//    val arr = Array.range(1,100,3)  //3 步长
//    arr.foreach(println)         //1-99
    val arr1 = Array(1,2,3)
    //访问数组元素
    println(arr1(0))  //第一个元素
    println(arr1(2))  //第三个元素
    println(arr1(20)) //报错,数组越界!第21个元素,java.lang.ArrayIndexOutOfBoundsException:
  }
}

可变数组

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))
  }
}
object array04 {
  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))
  }
}