40_集合_陣列
阿新 • • 發佈:2021-10-29
陣列的分類
* 可變陣列(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(","))) //匿名函式 }