4.Scala数组

1.关于Scala中的数组的创建与操作

1).最原始的创建数组的方式:val array = new Array[Int](5),指定数组的类型是Int,且其固定长度是5个长度

2).最常用和经典的创建数组的方式是:Array[Int]{1,2,3,4,5},直接通过Array类名并传入参数的方式来创建数组实例,其背后的实现是调用Array的工厂方法apply来构建出数组及数组的内容。

3).关于Array本身底层的实现是借助JVM平台上的java语言数组来实现的,是不可变的!

4).若我们想使用可变数组的话,首先需要导入import scala.collection.mutable.ArrayBuffer,然后使用ArrayBuffer[Int]这个可变数组

5).关于ArrayBuffer增加元素默认情况下都是在ArrayBuffer末尾增加元素的,效率非常高,其实,即使是Array,其本身虽然不可变(元素不可删减),但是我们可以修改Array中的每个元素的内容,所以多线程操作的时候,还是必须考虑并发写的问题。

6).若想在已经有的数组的基础上通过作用于每个元素来生成新的元素构成新的数组,则可以通过yeild语法完成。

object HelloArrayOps {
  
  def main(args: Array[String]): Unit = {
//    val array = new Array[Int](5)
    val array = Array[Int](1,2,3,4,5) //在这里可以去掉[Int]这个泛型,是因为Scala有类型推导的能力
//    val array = Array.apply(1,2,3,4,5)
    array(0) = 10  //数组的索引下标是从0开始的
    for(item <- array) println(item)
    
    val names = Array("Scala","Kafka","Spark")
    for(item <- names) println(item)
    
    println(">>>>>>>>>>>>>>>>>>>>>>>>> 可变数组 <<<<<<<<<<<<<<<<<<<<<<<<<<<")
    import scala.collection.mutable.ArrayBuffer
    val arrayBuffer = ArrayBuffer[Int]()
    arrayBuffer += 1
    arrayBuffer += 2
    arrayBuffer += (3,4,5,6,7,8,9,10)
    arrayBuffer ++= Array(1,2,3)
    arrayBuffer.insert(arrayBuffer.length - 1, 100,1000)
    arrayBuffer.remove(arrayBuffer.length - 2)
    arrayBuffer.toArray //将其变成固定长度数组,当需要多线程并发操作的时候,把ArrayBuffer转换成Array就非常重要
    for(item <- arrayBuffer) println(item) 
    
    for(i <- 0 until array.length) print(array(i) + " ") //10 2 3 4 5
    println
    for(i <- 0 until (array.length,2)) print(array(i) + " ")  //每个2个位置打印,得出10 3 5  
    println
    for(i <- 0 until array.length reverse) print(array(i) + " ") 
    println
    print("sum = " + array.sum)
    println
    print("max = " + array.max)
    println
    scala.util.Sorting.quickSort(array) //对数组进行升序排序,内容变成了2,3,4,5,10
    println("quickSort = " + array(0))
    print(array.mkString(","))
    println
    println(array.mkString("******",",","******")) //******2,3,4,5,10******
    
    val arrayAddedOne = for(item <- array) yield item + 1 
    println("arrayAddedOne:" + arrayAddedOne.mkString(" ")) //arrayAddedOne:3 4 5 6 11
    
    val arrayEven = for(item <- array if item % 2 == 0) yield item
    println("arrayEven:" + arrayEven.mkString(",")) //arrayEven:2,4,10
    
    println(array.filter {x => x % 2 == 0}.mkString("  "))//2  4  10
    println(array.filter {_  % 2 == 0}.mkString("  ")) //2  4  10
    println(array.filter {_  % 2 == 0}.map{_ * 10}.mkString("  ")) // 20  40  100
    
  }
  
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值