Scala深入浅出进阶经典 第41讲:List继承体系实现内幕和方法操作源码揭秘
2015-09-24 23:55
435 查看
package com.dt.scalaInAction.demo_041 /** * List继承体系实现内幕和方法操作源码揭秘 * * List本身是一个抽象类 定义如下: * sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] * with Product * with GenericTraversableTemplate[A, List] * with LinearSeqOptimized[A, List[A]] * * List下的两个重要的子类就是 Nil和 :: * * Nil表示空值 定义为一个Cass Object: case object Nil extends List[Nothing] * * :: 定义 final case class ::[B](private var hd: B, private[scala] var tl: List[B]) extends List[B] * */ object List_Internal { def main(args: Array[String]): Unit = { val list = List(5, 3, 3, 7, 5) //这种方式其实是 调用List的伴生对象的apply方法 val list: List[Int] val listAny : List[Any] = list //这是一种"协变"的概念 Int为Any的子类 所以认为List[Int]的具体父类型可以是List[Any] println(list.isEmpty) //false println(list.head) //5 println(list.tail) //List(3, 3, 7, 5) println(list.length) //5 println(list drop 4) //List(5) /** * drop函数的源码 * override def drop(n: Int): List[A] = { var these = this var count = n while (!these.isEmpty && count > 0) { these = these.tail count -= 1 } these } */ println(list.map(_*2)) //List(10, 6, 6, 14, 10) /** * map源码 * def map[B, That](f: A => B)(implicit bf: CanBuildFrom[Repr, B, That]): That = { def builder = { // extracted to keep method size under 35 bytes, so that it can be JIT-inlined val b = bf(repr) b.sizeHint(this) b } val b = builder for (x <- this) b += f(x) b.result } */ } }
以上内容是从王家林老师DT大数据课程第41讲的学习笔记和个人整理。
DT大数据微信公众账号:DT_Spark
王家林老师QQ:1740415547
王家林老师微信号:18610086859
第41讲视频网站地址:http://pan.baidu.com/s/1hq4a0x2
相关文章推荐
- ABP之模块分析
- git config
- Oracle 分析函数的使用(主要是rollup用法)
- 1A Theatre Square
- 一切成功源于积累——20150924 美国耐用品订单符合预期为负值 黄金1小时1600点
- XHTML5 ----- 表单验证(用户名、密码和email检测)
- 字符串的拼接和拷贝的实现
- sublime 快捷键
- MySQL中的索引初步介绍
- ABP项目中的使用AutoMapper
- autoLayout自动布局
- servlet 中字符集的处理
- android studio 更新 Gradle错误解决方法
- Qt5中文显示出现乱码解决
- HDU 2089 不要62 数位DP入门
- Windows中C:\WINDOWS\system32\drivers\etc\hosts文件的作用
- ajax
- wc命令
- cut命令
- JAVA学习2_Eclipse引入jar包的三种方式