scala語言學(xué)習(xí)筆記3之容器操作
數(shù)組
和Java一樣,常量引用指向是一個(gè)地址,數(shù)組引用被標(biāo)記為常量,只是數(shù)組引用的地址不能被更改,數(shù)組中的值是可以被更改的。
object TestScala4 {
def main(args: Array[String]): Unit = {
val arr = Array[Int] (1,2,3,4)
println(arr(0))
arr(0)=10;
println(arr(0))
arr.foreach(println)
}
}
可變與不可變
scala中集合分為兩個(gè)包,一個(gè)是immutable不可變的,一個(gè)是mutable可變的

鏈表
根據(jù)可變不可變,鏈表也就有可變鏈表與不可變鏈表。添加方式也換了種寫法。
object TestScala5 {
def main(args: Array[String]): Unit = {
val list1 = List(1,2,3,4,5,6,7,8)
list1.foreach(println)
val list2 = new ListBuffer[Int]()
list2.+=(33)
list2.+=(34)
list2.+=(35)
list2.foreach(println)
}
}Set
可以在方法內(nèi)部導(dǎo)入包,下一行代碼將選擇就近的包來使用。

Tuple
這個(gè)寫著確實(shí)很爽啊,哈哈,里面啥都能裝,裝個(gè)函數(shù),再傳參到一個(gè)能傳入函數(shù)參數(shù)函數(shù)中。還有Tuple20,果斷還是放棄寫那么多。

迭代器
object TestScala7 {
def main(args: Array[String]): Unit = {
val t2 = Tuple2(1,"dsfs")
val t3 = Tuple3(1,"sdfs",2)
val t6 = Tuple6(
1,
Array[Int](1,2,3),
List(22,33),
Set("sss","aaa"),
"sdfsd",
(x:Int,y:Int)=>{x+y}
)
def compute(x:Int,y:Int,f:(Int,Int)=>Int): Int ={
return f(x,y)
}
var result = compute(t6._3(0),t6._2(2),t6._6)
println(result)
val iterator = t6.productIterator
while(iterator.hasNext){
println(iterator.next())
}
}
}
Map
學(xué)習(xí)新語言,肯定不能少了我們的鍵值對集合。

可變的Map
object TestScala8 {
def main(args: Array[String]): Unit = {
val map01:Map[String,Int] = Map(("a",11),"b"->22,("a",111))
val keys:Iterable[String] = map01.keys
println(map01.get("a"))
println(map01.get("a").get)
println(map01.get("b"))
println(map01.get("b").get)
println(map01.get("c").getOrElse("hello"))
for (elem <- keys) {
println(s"key:$elem value:${map01.get(elem).get}")
}
val map02 = scala.collection.mutable.Map(("a",11),("b",22))
map02.put("hello",33);
println(map02.get("hello").get)
}
}
類MapReduce操作
我們可以使用scala語言對集合進(jìn)行一次類MapReduce的操作,單詞計(jì)算需求。全程使用迭代器模式。

object TestScala9 {
def main(args: Array[String]): Unit = {
//將一個(gè)文件導(dǎo)入內(nèi)存
val lines = List("hello word","hello scala","hello python","life short","I use python")
// Map 過程 采用迭代器模式
val iteratorLines:Iterator[String] = lines.iterator
val words = iteratorLines.flatMap((element:String)=>element.split(" "))
val mapList = words.map((_,1))
// Reduce 采用迭代器模式
val reduceMap = scala.collection.mutable.Map[String,Int]()
mapList.foreach(
element=>{
if(reduceMap.contains(element._1)){
reduceMap.put(element._1,reduceMap.get(element._1).get+1)
}else{
reduceMap.put(element._1,1)
}
}
)
reduceMap.foreach(println)
}
}評論
圖片
表情
