Scala 深入浅出实战经典 第80讲:scala中List的泛型分析以及::类和Nil对象
来源:互联网 发布:paxos算法执行过程 编辑:程序博客网 时间:2024/06/08 07:59
一、课程前导
DT大数据梦工厂的微信公众号是DT_Spark,每天都会有大数据实战视频发布,请您持续学习。
Scala 深入浅出实战经典(1-64讲)完整视频、PPT、代码下载:
百度云盘:http://pan.baidu.com/s/1c0noOt6
腾讯微云:http://url.cn/TnGbdC
360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2
Scala是最为重要的大数据语言,该视频每天还在持续跟新中,预计大约有140讲,请您根据上述视频彻底掌握Scala实战技术。
最后,王家林老师个人的微信是18610086859
51CTO视频:http://edu.51cto.com/lesson/id-71116.html
优酷视频:http://v.youku.com/v_show/id_XMTMwMzk5NTM0MA==.html?from=y1.7-1.2
腾讯视频:http://v.qq.com/boke/page/s/0/s/s0161b7yg4s.html
56网视频:http://www.56.com/u41/v_MTM4MzA2MTk4.html
二、课程内容
【DT大数据梦工厂视频】第80讲:scala中List的泛型分析以及::类和Nil对象
本讲视频由王家林老师通过代码案例的方式讲解了List的泛型分析以及::类和Nil对象。List是对scala的类型系统的一个非常好的使用,进一步巩固List的知识对于理解scala的类型系统是非常有价值的。本讲主要分析了List的泛型、::类和Nil对象。
一,List的泛型
List类的源代码为
sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] with Product with GenericTraversableTemplate[A,List] with LinearSeqOptimized[A,List[A]]{
def isEmpty : Boolean
def head : A
def tail : List[A]
.......
}
从List的源码中可以知道List是抽象类,所以我们不可以直接创建List的实例,List[+A]表示List是协变的。方法head 会返回List的第一个元素,元素的类型为泛型A。方法tail返回除了List中第一个元素之外的其他的元素所以构成的新的List集合,其类型是List[A]。
二,::类和Nil对象
List有两个非常重要的子类,一个是::,一个是Nil,这两个子类都是case class。Nil表示一个空的列表,而::表达的是一个非空的列表。
::类的源代码如下:
final case class ::(private var hd : B ,private[scala] var tl : List) extends List{ .....}
这里::使用了中缀表达式的方式,中缀表达式是支持模式匹配的,参数hd表示元素的开头,参数tl表示元素的结束。
Nil的源代码如下:
case object Nil extends List[Nothing]{
override def isEmpty = true
override def head : Nothing = throw new NoSuchElementException("tail of empty list")
override def tail : List[Nothing] = throw new UnsupportedOperationException("tail of empty list")
override def equals(that Any) = that match{
case that1 : scala.collection.GenSeq[_] => that1.isEmpty
case _ => false
}
} List[Nothing]中的Nothing表示不存在任何内容,所有Nil可以兼容List的任何类型,而Nil本身就是表示类型的值不存在,因为值不存在,所有Nil的head和tail方法都抛出了异常。
- Scala 深入浅出实战经典 第80讲:scala中List的泛型分析以及::类和Nil对象
- Scala深入浅出进阶经典 第80讲:List的泛型分析以及::类和Nil对象
- Scala 深入浅出实战经典 第7讲:Scala类的属性和对象私有字段实战详解
- scala List的泛型分析以及::类和Nil对象
- 第80讲:List的泛型分析以及::类和Nil对象学习笔记
- Scala 深入浅出实战经典 第14讲:Scala中作为接口的trait、在对象中混入trait代码实战
- Scala深入浅出进阶经典 第84讲:Scala中List和ListBuffer设计实现思考
- Scala深入浅出进阶经典 第85讲:Scala中For表达式的强大表现力实战
- Scala深入浅出进阶经典 第83讲:Scala中List的实现内幕源码揭秘
- Scala深入浅出实战经典第82讲
- Scala 深入浅出实战经典 第10讲:Scala单例对象、伴生对象实战详解
- Scala深入浅出进阶经典 第86讲:Scala中For表达式的生成器、定义和过滤器
- Scala深入浅出进阶经典 第64讲:Scala中隐式对象代码实战详解
- Scala 深入浅出实战经典 第9讲:Scala的内部类实战详解
- Scala 深入浅出实战经典 第12讲:Scala中的继承:超类的构造、重写字段、重写方法代码实战
- Scala深入浅出进阶经典 第52讲:Scala中路径依赖代码实战详解
- Scala深入浅出进阶经典 第53讲:Scala中结构类型实战详解
- Scala深入浅出进阶经典 第54讲:Scala中复合类型实战详解
- Service的两种调用方法
- TCP、UDP、Socket
- dz7.2升级到dzx2
- linux 下 c++ 多线程的实现
- angular.js笔记 ---关于Route路由
- Scala 深入浅出实战经典 第80讲:scala中List的泛型分析以及::类和Nil对象
- java 排序
- Android性能优化典范 - 第2季
- 线程通信2
- 136.Single Number
- 文件系统(3.6)------嵌入式系统软件及操作系统知识
- hdu 4006 The kth great number(线段树 || 优先队列)
- HDU2542 矩形A + B
- HDU - 1312 Red and Black (dfs)