scala中的數組比java的數組強大不少 java
一、定長數組:長度不變的數組Array,如:聲明一個長度爲10的整形數組,val arr = Array[Int](10);聲明並初始化一個字符串數組: val arrStr = Array("wo","cha","yo")。訪問數組方式:訪問arrStr第一個元素,arrStr(1)便可
算法
二、變長數組(即數組緩衝):java中有ArrayList和scala中的ArrayBuffer等效;可是ArrayBuffer更增強大,經過下面的事列來熟悉ArrayBuffer:數組
import collection.mutable.ArrayBuffer val arrbuff1 = ArrayBuffer[Int]() val arrBuff2 = ArrayBuffer(1,3,4,-1,-4) arrbuff1 += 23 //用+=在尾端添加元素 arrbuff1 += (2,3,4,32) //同時在尾端添加多個元素 arrbuff1 ++= arrBuff2 //能夠用 ++=操做符追加任何集合 arrbuff1 ++= Array(2,43,88,66) arrbuff1.trimEnd(2) //移除最後的2個元素 arrbuff1.remove(2) //移除arr(2+1)個元素 arrbuff1.remove(2,4) //從第三個元素開始移除4個元素 val arr = arrbuff1.toArray //將數組緩衝轉換爲Array val arrbuff2 = arr.toBuffer //將Array轉換爲數組緩衝
三、遍歷數組和數組緩衝:在java中數組和數組列表/向量上語法有些不一樣。scala則更加統一,一般狀況,咱們能夠用相同的代碼處理這兩種數據結構,for(...) yield 循環建立一個類型和原集合類型相同的新集合。for循環中還能夠帶守衛:在for中用if來實現。數據結構
for(i <- 0 until arrbuff1.length) yield arrbuff1(i) * 2 //將獲得ArrayBuffer(2,6,4,-2,-4) for(i <- 0 until (arrbuff1.length,2)) yield arrbuff1(i) * 2 //將獲得ArrayBuffer(12,-4) for(elem <-0 arrbuff1) print(elem) //若是不須要使用下標,用這種方式最簡單了 for(i <- arrbuff1 if arrbuff1 > 0) print i //打印出arrbuff1中爲整數的值 arrbuff1.filter( _ > 0).map{ 2 * _} //生成arrbuff1中的正數的兩倍的新集合 arrbuff1.filter {_ > 0} map {2 * _} //另外一種寫法
四、經常使用算法:scala有不少便捷內建函數,如
函數
arrbuff1.sum //對arrbuff1元素求和 Array("asd","sdf","ss").max //求最大元素 arrbuff1.sorted(_ < _) //將arrbuff1元素從小到大排序 arrbuff1.sorted(_ > _) //從大到小排序 util.Sorting.quickSort(Array) //針對數組排序,單不能對數組緩衝排序 val arr = Array(1,23,4,2,45) arr.mkString(",") //指定分割符 arr.mkString("(",",",")") //指定前綴、分隔符、後綴
更多函數參見Scaladocui
五、多維數組:
spa
val matrix = Array.ofDim[Int](5,4) //三行四列的二維數組 matrix(2)(3) //訪問第二行、第三個元素
六、scala數組和java互操做:因爲scala數組是用java數組實現的,因此能夠在java和scala之間來回傳遞,引入scala.collectin.JavaConversion ,能夠在代碼中使用scala緩衝,在調用java方法時,這些對象會被自動包裝成java列表。反過來說,引入scala.collection.asScalaBuffer時,當java方法返回java.util.List時,咱們可讓它轉換成一個Bufferscala