大資料數列修鍊-Scala課程11

來源:互聯網
上載者:User

標籤:

接著昨天的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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.