Scala深入浅出进阶经典 第41讲:List继承体系实现内幕和方法操作源码揭秘

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
            }
         */
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值