数组的分类
* 可变数组(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(","))) //匿名函数
}