接着昨天的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.mutable
import scala.collection.mutable.TreeSet
import scala.collection.immutable.TreeMap
import scala.collection.immutable.HashMap
object 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.4
final 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的更多相关文章

  1. 大数据系列修炼-Scala课程01

    简介 由于本人刚毕业,也是从事软件开发相关的工作.想再学习一下关于大数据.移动互联网.云计算相关的技术.为我的未来打好基础.并且从零开始学习大数据相关的知识,脚踏实地的走好每一步,听行业前辈说毕业生刚 ...

  2. 大数据系列修炼-Scala课程06

    关于Scala中的正则表达式与模式匹配结合的正则表达式Reg 正则表达式的实现:正则表达式的定义与其它语言差不多,只需在表达式后加一个.r,并且可以遍历相应的表达式进行匹配 //定义的正则表达式 va ...

  3. 大数据系列修炼-Scala课程03

    前言 今天上班看了很多关于前端js,jQuery.bootstrap.js以及springMVC看得迷迷糊糊的,毕竟以前很少去学习前端的技术,所有看得有点困,还好看得比较多,回家后也开始学习关于Sca ...

  4. 大数据系列修炼-Scala课程07

    由于昨天下班后有点困,就没有来及写博客,今天会把它补上!把这个习惯坚持下去! 关于Scala高阶函数详解 1.Scala高阶函数代码实现:高阶函数就是在我们函数中套用函数 2.高阶函数代码详解:高阶函 ...

  5. 大数据系列修炼-Scala课程04

    Scala中继承实现:超类的构造.字段重写.方法重写 关于超类的构建:超类可以在子类没有位置的限制,可以在子类中调用父类的方法 类中字段重写:在重写字段前面加一个override就可以重新赋值 类中方 ...

  6. 大数据系列修炼-Scala课程02

    Scala数组操作实战详解 接着昨天的课程,下面我们继续学习关于Scala数组操作详解.Scala数组的定义 //数组定义 //定长数组格式 /** * val arrayName = new Arr ...

  7. 大数据系列修炼-Scala课程08

    接下来会讲解关于各种模式匹配,从中就会知道模式匹配的重要性 关于Type.Array.List.Tuple模式解析 1.Type模式匹配代码解析 //关于Type类型的模式匹配 //匹配 Int类型. ...

  8. 大数据系列修炼-Scala课程10

    今天主要是关于Scala中对List的相关操作,list在Scala中应该是至关重要,接下来会讲解关于List的一系列操作 List的map.flatMap.foreach.filter操作讲解 1. ...

  9. 大数据系列修炼-Scala课程09

    Option使用和实现内幕源码揭晓 1.Option中的sealed关键字解析:Option中用了sealed,定义的case class与case object必须在同一个文件中.Option在模式 ...

随机推荐

  1. 【Nginx】开发一个简单的HTTP模块

    首先来分析一下HTTP模块是怎样介入Nginx的. 当master进程fork出若干个workr子进程后,每一个worker子进程都会在自己的for死循环中不断调用事件模块: for ( ;; ) { ...

  2. iOS英语—》中国本土化,如调用专辑,摄像头的变化“cancel”,“photos”至“撤消”,“摄像头”

    呼叫系统相册.系统相簿界面后标题显示"photos",可是手机语言已经设置显示中文,纠结半天,终于在info.plist设置解决这个问题. 仅仅须要改三个地方: 1.plist文件 ...

  3. Apache HTTP Server 与 Tomcat 的三种连接方式介绍(转)

    首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接.事实上 Tomcat 本身已经提供了 HTTP 服务,该服务默认的端口是 8080,装好 tomcat 后通过 8080 端 ...

  4. 文件翻译002片:Process Monitor帮助文档(Part 2)

    [筛选亮点] Process Monitor提供了一些方式来配置筛选器和高亮显示.         筛选器的包括与排除 您能够在筛选器中指定事件的属性,这样就能够令Process Monitor仅显示 ...

  5. 迅雷云加速开放平台c#demo

    迅雷云加速开放平台c#demo.很多人很遇到下载文件的问题.这个例子是调用迅雷云加速开放平台的dll,进行下载,速度很快,下载过程中可以获取到很全的下载信息,比如下载速度,进度,完成状态等. 例子中带 ...

  6. [生产环境数据恢复]innobackupex: fatal error: OR no 'datadir' option in group 'mysqld' in MySQL options

    1 运行恢复命令  [xxx@xxx-c001db1 tmp]$ time /usr/bin/innobackupex --rsync --user="user" --passwo ...

  7. OAuth打造webapi认证服务

    使用OAuth打造webapi认证服务供自己的客户端使用 一.什么是OAuth OAuth是一个关于授权(Authorization)的开放网络标准,目前的版本是2.0版.注意是Authorizati ...

  8. Visual Studio Team Services使用教程--Readers tfs组成员添加

  9. ASP.NET5 Beta8

    ASP.NET5 Beta8 ASP.NET5 beta8现已上都的NuGet作为一个工具升级到Visual Studio2015!此版本极大地扩展.NET核心对OS X和Linux所支持的范围.您现 ...

  10. directX--大约CSource和CSourceStream (谁在叫fillbuffer)

    CSourceStream类别,它是CSource类别OutputPin[source.h/source.cpp] 派生自CAMThread和CBaseOutputPinl         成员变量: ...