40_集合_数组

数组的分类
* 可变数组(Array)、不可变数组(ArrayBuffer)
可变&不可变
* 说明
* 可变 : 长度可变,添加或删除元素后,原对象改变
* 不可变 : 长度不可变,添加或删除后,原对象不改变
*
不可变数组 - Array
* 声明
* 1. 通过类 创建
* var arr:Array[Int] = new Array[Int](10)
* 2. 通过 伴生对象的apply返回对象
* var arr1 = Array.apply(10, 1, 2)
* 简写 var arr1 = Array(10, 1, 2)
*
* 获取数组长度 arr.length
*
* 修改元素
* arr1(0) = 99
* arr1.update(1, 88)
*
* 打印数组 返回 String,指定分割符
* println(arr1.mkString(","))
*
* 遍历数组
* for遍历
* 示例 for (ele <- arr1) println(ele)
* foreach遍历 + 匿名函数
* 示例 arr1.foreach(println)
*
* 增加元素(返回新数组,不改变元素组)
* 尾部添加
* 示例 var arr3: Array[Int] = arr1 :+ 5 //底层调用appended方法
* 示例 var arr3_1: Array[Int] = arr1.appended(5)
* 头部添加
* 示例 var arr4 = 5 +: arr1 //底层调用prepended方法
* 示例 var arr4_1 = arr.prepended(5)
*
可变数组 - ArrayBuffer
* 导包 scala.collection.mutable.ArrayBuffer
*
* 声明
* 1. 通过 伴生对象的apply返回对象
* 示例 var arr1 = ArrayBuffer[Int](1, 2, 3)
*
* 增加元素(返回原数组指针,改变原数组)
* 尾部添加
* 示例 arr1.append(10) //底层调用addOne(elem) 方法
* arr1.append(10).append(6) //连续添加
* 示例 arr1 += 9 //底层调用addOne(elem) 方法
* 头部添加
* 示例 arr1.prepend(10)
* 9 +=: arr1 //底层调用prepend方法
* 指定位置添加 (返回类型Unit)
* 示例 arr1.insert(1, 22)
*
* 修改元素
* 示例 arr1(1) = 111
* 示例 arr1.update(2, 222)
*
可变数组与不可变数组的转换 (返回新对象,原数组不变)
* Array -> ArrayBuffer
* 语法
* var arr2Buffer = arr.toBuffer
* ArrayBuffer -> Array
* 语法
* var buffer2arr = arrBuffer.toArray
*
多维数组 (数组的元素是数组)
* 声明
* 示例 var dimArr = Array.ofDim[Int](3, 4)
*
复制代码
import scala.collection.mutable.ArrayBuffer

/**
  * @author gaocun
  * @create 2021-10-28 5:48 PM */
object Array_01 {
  /*
  *  数组的分类
  *     可变数组(Array)、不可变数组(ArrayBuffer)
  *  可变&不可变
  *     说明
  *        可变 : 长度可变,添加或删除元素后,原对象改变
  *      不可变 : 长度不可变,添加或删除后,原对象不改变
  *
  *  不可变数组 - Array
  *     声明
  *        1. 通过类 创建
  *           var arr:Array[Int] = new Array[Int](10)
  *        2. 通过 伴生对象的apply返回对象
  *           var arr1 = Array.apply(10, 1, 2)
  *           简写  var arr1 = Array(10, 1, 2)
  *
  *     获取数组长度 arr.length
  *
  *     修改元素
  *         arr1(0) = 99
  *         arr1.update(1, 88)
  *
  *     打印数组 返回 String,指定分割符
  *         println(arr1.mkString(","))
  *
  *     遍历数组
  *       for遍历
  *         示例  for (ele <- arr1) println(ele)
  *       foreach遍历 + 匿名函数
  *         示例  arr1.foreach(println)
  *
  *     增加元素(返回新数组,不改变元素组)
  *         尾部添加
  *            示例 var arr3: Array[Int] = arr1 :+ 5   //底层调用appended方法
  *            示例 var arr3_1: Array[Int] = arr1.appended(5)
  *         头部添加
  *            示例 var arr4 = 5 +: arr1 //底层调用prepended方法
  *            示例 var arr4_1 = arr.prepended(5)
  *
  *  可变数组 - ArrayBuffer
  *     导包 scala.collection.mutable.ArrayBuffer
  *
  *     声明
  *         1. 通过 伴生对象的apply返回对象
  *            示例   var arr1 = ArrayBuffer[Int](1, 2, 3)
  *
  *     增加元素(返回原数组指针,改变原数组)
  *        尾部添加
  *           示例  arr1.append(10)  //底层调用addOne(elem) 方法
  *                arr1.append(10).append(6) //连续添加
  *           示例  arr1 += 9       //底层调用addOne(elem) 方法
  *        头部添加
  *           示例  arr1.prepend(10)
  *                9 +=: arr1      //底层调用prepend方法
  *        指定位置添加 (返回类型Unit)
  *           示例  arr1.insert(1, 22)
  *
  *    修改元素
  *       示例 arr1(1) = 111
  *       示例 arr1.update(2, 222)
  *
  *    可变数组与不可变数组的转换 (返回新对象,原数组不变)
  *       Array -> ArrayBuffer
  *          语法
  *             var arr2Buffer = arr.toBuffer
  *       ArrayBuffer -> Array
  *          语法
  *             var buffer2arr = arrBuffer.toArray
  *
  *    多维数组 (数组的元素是数组)
  *       声明
  *          示例 var dimArr = Array.ofDim[Int](3, 4)
  *
  * */

}

//不可变数组 - 长度不可变
object ArrayTest extends App {
  // 1.定义 - 通过new 对象创建
  var arr: Array[Int] = new Array[Int](10)
  // 2.定义2 - 通过伴生对象的apply方法创建
  var arr1 = Array.apply(10, 1, 2)

  // 3.获取数组长度
  var size: Int = arr.length
  println("数组长度 - " + size)

  // 4.修改元素
  arr1(0) = 99
  arr1.update(1, 88)
  println(arr1.mkString(","))

  // 5.打印数组
  println(arr1.mkString(","))

  // 6.遍历数组
  //for遍历
  for (ele <- arr1) println(ele)

  //foreach遍历
  def show(x: Int) = println(x)

  arr1.foreach(show)

  arr1.foreach(println)

  // 7.增加元素
  println(arr1.mkString("-"))
  arr1 :+ 5
  // 尾部添加,返回新数组
  var arr3: Array[Int] = arr1 :+ 5
  var arr3_1: Array[Int] = arr1.appended(5)
  println(arr1.mkString("-"))
  println(arr3.mkString("-"))
  // 头部添加,返回新数组
  var arr4 = 5 +: arr1
  var arr4_1 = arr.prepended(5)
  println(arr4.mkString(","))

}

//可变数组
object ArrayBufferTest extends App {
  // 定义数组 - 必须导包
  var arr1 = ArrayBuffer[Int](1, 2, 3)

  // 打印数组
  println(arr1.mkString(","))

  // 遍历数组
  for (e <- arr1) println(e)

  // 添加元素
  // 尾部添加
  arr1.append(10)
  arr1.append(10).append(6) //连续添加
  arr1 += 9
  arr1 += 88 + 66 // 连续添加
  println(arr1.mkString("-"))
  //头部添加
  9 +=: arr1
  arr1.prepend(10)
  println(arr1.mkString("-"))
  //指定位置添加
  var arr6 = arr1.insert(1, 22)
  println(arr6)

  // 修改元素
  arr1(1) = 111
  arr1.update(2, 222)
  println(arr1.mkString("-"))
}

//可变数组与不可变数组的转换
object ArrayToArrayBufferTest extends App {
  // 定义不可变数组
  var arr = Array(1, 2, 3)
  println(arr.getClass)
  // 定义可变数组
  var arrBuffer = ArrayBuffer(1, 2, 3)
  println(arrBuffer.getClass)
  // Array -> ArrayBuffer // 返回新对象 ArrayBuffer ,原数组不变
  var arr2Buffer = arr.toBuffer
  println(arr.getClass)
  println(arr2Buffer.getClass)
  // ArrayBuffer -> Array // 返回新对象 Array ,原数组不变
  var buffer2arr = arrBuffer.toArray
  println(arrBuffer.getClass)
  println(buffer2arr.getClass)
}

//多维数组
object DimArrayTest extends App {
  //定义 n1 = 行数, n2 = 列数
  var dimArr = Array.ofDim[Int](3, 4)
  //添加元素
  dimArr(0)(0) = 1
  dimArr(0)(1) = 2
  dimArr(0)(2) = 3
  dimArr(0)(3) = 4
  dimArr(1) = Array(5, 6, 7, 8)
  dimArr(2) = Array(9, 10, 11, 12)
  //遍历数组
  for (arr <- dimArr) {
    for (e <- arr) {
      print(e + " ")
    }
    println()
  }

  //打印数组
  def show(e: Array[Int]) = println(e.mkString(","))

  dimArr.foreach(show)
  dimArr.foreach((e: Array[Int]) => println(e.mkString(",")))
  dimArr.foreach(e => println(e.mkString(","))) //匿名函数

}
复制代码

 

posted @   学而不思则罔!  阅读(34)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示