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
}
}