(三十)scala中的Array

29 阅读2分钟

(一)Array的定义

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

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

(二)不可变数组

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

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

package array

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

}

注意: Array 和 List 的区别

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

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

  • 两种类型: 可变,不可变

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

  • 常用的方法: 添加,删除,连接,循环,排序,......

(三)可变数组

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

步骤

  1. 新建
  2. 访问修改
  3. 添加元素

(1) 添加一个元素;+= 元素

(2) 添加多个元素;+=(元素1, 元素2)

  1. 删除元素

(1) 删除一个元素: -= 元素

(2) 删除多个元素: -= (元素1, 元素2)

(3) 删除指定位置的元素: remove(下标)

(4) 删除指定位置的多个元素:remove(下标起点,下标终点)

package 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(3, 3) // 从指定位置开始删除, 删除几个?
    // 修改
    arr1(2) = 700
    // 判断是否存在?
    println( arr1.contains(4)) // true
    println( arr1.contains(8)) // false

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

(四)数组常用方法

  • 代码一
package 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:
  }
}
  • 代码二
package array

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