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(","))) //匿名函数 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界