第82讲:Scala中List的ListBuffer是如何实现高效的遍历计算的?

今天学习下list中的ListBuffer实现的高效计算。让我们先来看下代码

def main(args:Array[String]){
   
    val list = List(1,2,3,4,5,6,7,8,9)
    increment(list)
    increment_MoreEffective(list)
    increment_MostEffective(list)
  }
 
  def increment(list:List[Int]):List[Int] = list match{//递归
    case List() => List()
    case head :: tail => head + 1 :: increment(tail)
  }
 
  def increment_MoreEffective(list : List[Int]):List[Int] = {
        var result = List[Int]()
        for(element <- list) result = result ::: List(element+1)
        result
  }
 
  def increment_MostEffective(list:List[Int]) : List[Int]={
    import scala.collection.mutable.ListBuffer
    var buffer = new ListBuffer[Int]
    for(element <- list) buffer += element + 1
    buffer.toList
  }

首先来看increment方法,该方法定义了一个递归操作,通过列表头和tail的方法进行递归,每次递归都会产生新的调用堆栈。所以,该方法遇到大量的列表数据的时候,需要的内存就会巨量增加。

再来看increment_MoreEffective方法。该方法使用的是列表追加循环操作,该操作每次循环只是进行一个列表的追加,理论上,支持无限多的列表元素。但是,循环中的过程中,每次循环都会产生一个新对像,会产生中间操作和数据,效率上看的话,不太高。

最后我们来看increment_MostEffective方法。该方法使用的是listbuffer,列表缓存,实现元素的遍历操作。该方法只会对一个对像进行操作,即对ListBuffer进行元素的追加等操作。这是最高效最省资源的方法。

分享下更多的scala资源吧:

百度云盘:http://pan.baidu.com/s/1gd7133t

微云云盘:http://share.weiyun.com/047efd6cc76d6c0cb21605cfaa88c416

360云盘: http://yunpan.cn/cQN9gvcKXe26M (提取码:13cd)

信息来源于 DT大数据梦工厂微信公众账号:DT_Spark

关注微信账号,获取更多关于scala学习内容

时间: 2024-10-11 22:26:21

第82讲:Scala中List的ListBuffer是如何实现高效的遍历计算的?的相关文章

Scala深入浅出实战经典 第82讲:Scala中List的ListBuffer是如何实现高效的遍历计算的?

package com.dt.scala.list object ListBuffer_Internals { def main(args: Array[String]) { val list = List(1,2,3,4,5,6,7,8,9) increment(list) increment_MoreEffective(list) increment_MostEffective(list) } def increment(list: List[Int]): List[Int] = list

Scala中List的ListBuffer实现高效遍历

今日[DT大数据梦工厂视频]<第82讲:Scala中List的ListBuffer是如何实现高效的遍历计算的?>土豆视频:http://www.tudou.com/programs/view/WBW9Ki9Y_1g/ 优酷视频:http://v.youku.com/v_show/id_XMTMwNTk0NjUwNA==.html?from=y1.7-1.2 56网视频:http://www.56.com/u63/v_MTM4MzM3MTk2.html (DT大数据梦工厂scala的所有视频.P

Scala深入浅出实战经典《第84讲:Scala中List和ListBuffer设计实现思考》笔记

感觉视频时间比较短,不过对于上班狗来说还比较适合,地铁上听一遍,回来做笔记时可以再听一遍,啦啦啦... 第84讲:Scala中List和ListBuffer设计实现思考 Goal:从case class::[B]出发思考 List, ListBuffer的设计 Gains: 1) case calss ::[B] 中虽然用的是var(可变),但是有private[scala]的限制: 如果没有改限制,可以改变除首元素外的其他元素,对共享数据带来麻烦. 2)保证scala元素本身操作的高效性,外部

王家林亲授《DT大数据梦工厂》第84讲:Scala中List和ListBuffer设计实现思考

我一直觉得Scala里的List设计的很诡异,今天阅读了王家林老师的 <第84讲:Scala中List和ListBuffer设计实现思考 >, 然后我就豁然开朗了. Scala的List是immutable的,因此将其声明为var, 有了这个隐式转换,操作ResultSet就变简单了. =============================================================== 王家林亲授<DT大数据梦工厂>大数据实战视频“Scala深入浅出实战经

Scala中List和ListBuffer设计实现思考

今日[DT大数据梦工厂视频]<第84讲:Scala中List和ListBuffer设计实现思考>51CTO视频:http://edu.51cto.com/lesson/id-71363.html土豆视频:http://www.tudou.com/programs/view/9vOkwWDGF6M/ (DT大数据梦工厂1至84讲scala的所有视频.PPT和代码在百度云盘的链接:http://url.cn/fSFPjS)百度云盘:http://pan.baidu.com/s/1c0FGBzq36

Scala中List的Scala中List和ListBuffer设计实现

学习了Scala中List的Scala中List和ListBuffer设计实现思考,scala list 内部很多操作是listbuffer做的,因为改变元素,listbuffer非常高效,我们看见tl是var类型的  ,但是他属于scala包及子包,我们看上去是可变的,但是由于包 的限制我们看不到. list列表 追加元素,如果tl前面没有 private[scala],可以改变除了第一个元素,其他所有元素构建的list,因为我们有同样的 tl,追加不同的元素,构造不同的列表,可以共享case

第84讲:Scala中List和ListBuffer设计实现思考

今天来学习了scala中的list和ListBuffer scala list 内部很多操作是listbuffer做的,因为改变元素,listbuffer非常高效,tl是var类型的  ,但是他属于scala包及子包,我们看上去是可变的,但是由于包的限制我们看不到.list列表 追加元素,如果tl前面没有 private[scala],可以改变除了第一个元素,其他所有元素构建的list,因为我们有同样的 tl,追加不同的元素,构造不同的列表,可以共享case  class ::,操作尾部的列表

第24讲: Scala中SAM转换实战详解

SAM 是single  abstract method的缩写,就是一些接口只有单个抽象方法 假设我们需要做一个按钮,每当按下按钮时,后台记录一次点击次数.在Java中代码实现的方式如下: package com.dt.scala.func import javax.swing.JButton import java.awt.event.ActionListener import java.awt.event.ActionEvent import javax.swing.JFrame objec

第26讲: Scala中的模式匹配入门实战详解

在scala中使用match表达式进行模式匹配,和其他语言中的switch语句的功能类型.但是match的功能更强大 我们先看一个简单的例子 object HelloPatternMatch {   def main(args: Array[String]): Unit = {     var data : Int = 1          data match {       case 1 => println("one")       case 2 => println