標籤:
接著昨天的list,也是學習集合的相關知識
ListBuffer、ArrayBuffer、Queue、stack相關操作
1.ListBuffer、ArrayBuffer代碼實現:ListBuffer與ArrayBuffer都是mutable可變的與java中的定義也差不多,可以追加的。
2.Queue、Stack相關操作:隊列是一端進去一端出來,而stack也是後進先出的原則,他們都是mutable可變的
import scala.collection.mutable.ListBuffer val listBuffer = new ListBuffer[Int] listBuffer += 1 listBuffer += 2 println(listBuffer) //ArrayBuffer是可變的 import scala.collection.mutable.ArrayBuffer val arrayBuffer = new ArrayBuffer[Int]() arrayBuffer += 1 arrayBuffer += 2 println(arrayBuffer) //隊列是先入先出 也是可變的 val empty = Queue[Int]() val queue1 = empty.enqueue(1) val queue2 = queue1.enqueue(List(2,3,4,5)) println(queue2) val (element, left) = queue2.dequeue println(element + " : " + left) import scala.collection.mutable.Queue val queue = Queue[String]() queue += "a" queue ++= List("b", "c") println(queue) println(queue.dequeue) println(queue) //棧也是可變的,先進後出 import scala.collection.mutable.Stack val stack = new Stack[Int] stack.push(1) stack.push(2) stack.push(3) println(stack.top) println(stack) println(stack.pop) println(stack)
Set、Map、TreeSet、treeMap相關操作
1.Set、Map相關操作:set與Map的元素都是mutable可變的也是無序的
2.TreeSet、TreeMap相關操作:treeMap與treeSet都是可以用來排序的
import scala.collection.mutableimport scala.collection.mutable.TreeSetimport scala.collection.immutable.TreeMapimport scala.collection.immutable.HashMapobject Set_Map { def main(args: Array[String]) { //set是可變的並且無序的 val data = mutable.Set.empty[Int] data ++= List(1, 2, 3) data += 4; data --= List(2, 3); println(data) data += 1; println(data) data.clear println(data) //map也是可變的無序的 向map中放值map(key)=value val map = mutable.Map.empty[String, String] map("Java") = "Hadoop" map("Scala") = "Spark" println(map) println(map("Scala")) //treeSet用來排序 val treeSet = TreeSet(9, 3, 1, 8, 0, 2, 7, 4, 6, 5) println(treeSet) val treeSetForChar = TreeSet("Spark", "Scala", "Hadoop") println(treeSetForChar) //treeMap用來排序 var treeMap = TreeMap("Scala" -> "Spark", "Java" -> "Hadoop") println(treeMap) }}
List繼承體系實現的內幕以及方法操作
1.List的繼承體系分析和源碼解讀:List通過繼承其他類並且自己也是抽象類別還是sealed修飾的,所帶的參數是泛型繼承父類的
sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] with Product with GenericTraversableTemplate[A, List] with LinearSeqOptimized[A, List[A]] with Serializable
//sealed用於模式比對的指在該包下面所有實現方法可以使用
+A:可以是泛型也可以子類的對象指向父類
2.List方法操作以及源碼解讀:通過實現Nil和::主要是裡面的head和tail以及isEmpty函數
@SerialVersionUID(0 - 8256821097970055419L)case object Nil extends List[Nothing] { override def isEmpty = true override def head: Nothing = throw new NoSuchElementException("head of empty list") override def tail: List[Nothing] = throw new UnsupportedOperationException("tail of empty list") // Removal of equals method here might lead to an infinite recursion similar to IntMap.equals. override def equals(that: Any) = that match { case that1: scala.collection.GenSeq[_] => that1.isEmpty case _ => false }}-->主要實現裡面的head、tail、isEmpty函數等
@SerialVersionUID(509929039250432923L) // value computed by serialver for 2.11.2, annotation added in 2.11.4final case class ::[B](override val head: B, private[scala] var tl: List[B]) extends List[B] { override def tail : List[B] = tl override def isEmpty: Boolean = false}-->主要是實現::空的實現
Scala中的泛型、泛型函數、泛型在Spark中廣泛使用
1.Scala中泛型型別實現:泛型型別在Scala中運用的相當多
2.Scala中泛型函數實現
3.Scala中的泛型在spark中廣泛使用
def zip[A1 >: A, B, That](that: GenIterable[B])(implicit bf: CanBuildFrom[Repr, (A1, B), That]): That = {sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] with Product with GenericTraversableTemplate[A, List] with LinearSeqOptimized[A, List[A]] with Serializable-->在Scala中泛型用的相當廣泛,可以說是隨處可見,Scala也是可以自動推斷出是什麼樣類型的
以上是今天的所學習的,不是很深,感覺應用從Scala源碼開始瞭解,才能深入學習其中的中東西。
該內容都是從王家林老師教程中學習,他的號:18610086859
最新課程視頻77講:http://yun.baidu.com/s/1dD10KFZ
該文章的地址39-42講:http://pan.baidu.com/s/1jGlbG2q
大資料數列修鍊-Scala課程11