Scala学习笔记(11)—集合(二)—数组

一、数组

1.不可变数组Array

(1) 定义

第一种定义方式

val arr1 = new Array[Int](10)

第二种定义方式,利用apply方法

val arr1 = Array(1, 2)

数组的访问,与Java用[]不同,Scala中用()

println(arr1(0))
(2) 遍历

根据索引遍历

for(i <- 0 until arr01.length) {
 print(arr01(i))
}
//简化写法
for(i <- nums.indices) {
 print(arr01(i))
}

直接遍历数组中的元素

 for (item <- arr01) {
	 println(item)
 }

遍历元素执行某个函数,调用foreach方法

arr2.foreach( (elem: Int) => println(elem) )
//继续简化
arr.foreach( println )
(3) 在首尾添加元素

+:看起来像一个运算符,但其实是一个方法,返回一个新的数组

	val newArr2 = newArr.+:(30)
	//通过空格省略.
    val newArr3 = newArr2 :+ 15
    val newArr4 = 19 +: 29 +: newArr3 :+ 26 :+ 73
    //打印数组,对于Array,println(arr2) 打印的是引用地址
    println(newArr4.mkString(", "))

2.可变数组ArrayBuffer

大数据里面很少有需要用可变数组的场景,所以为避免不必要的问题,一般能用不可变数组就用不可变数组

(1) 定义
    val arr1: ArrayBuffer[Int] = new ArrayBuffer[Int]()
    val arr2 = ArrayBuffer(23, 57, 92)
    //对于ArrayBuffer,println(arr2)可以直接打印出数组
    println(arr2)
    //转换为不可变数组Array
    val newArr: Array[Int] = arr1.toArray
    // 6. 不可变数组转换为可变数组
    val buffer: mutable.Buffer[Int] = newArr.toBuffer

Q:为什么println(arr)打印ArrayBuffer可以打印出数组,但是打印Array打印出的是引用地址?
A:println(arr)实际调用的是println(arr.toString()),ArrayBuffer本身是没有toString方法的,是通过隐式转换调用的IterableLike的toString方法,在这个方法里打印了数组。而对于Array,它首先直接继承的java.io.Serializable,因此它直接调用的Java的Object的toString方法,自然不会再去找隐式转换里的方法

(2) 添加元素
	//在末尾添加36
    arr1.append(36)
    //在开头添加11和76
    arr1.prepend(11, 76)
    //在索引位置1添加13和59
    arr1.insert(1, 13, 59)
    //在索引位置1直接加入另一个数组的所有元素
    arr1.insertAll(2, newArr1)
    //在开头添加另一个数组的所有元素
    arr1.prependAll(newArr2)
(3) 删除元素
//删除索引位置3的元素
arr1.remove(3)
//从索引位置0开始删除10个元素
arr1.remove(0, 10)
//删除指定值的元素
arr1 -= 13

3.多维数组

(1) 定义

ofDim() 最多可接收5个参数创建5维数组

//说明:二维数组中有三个一维数组,每个一维数组中有四个元素
val arr = Array.ofDim[Double](3,4)
(2) 访问和遍历
  val arr = Array.ofDim[Int](3, 4)
  arr(1)(2) = 88
  //遍历二维数组
  for (i <- arr) { //i 就是一维数组
 	 for (j <- i) {
	 print(j + " ")
  }

通过foreach遍历

array.foreach(line => line.foreach(println))
array.foreach(_.foreach(println))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值