Scala中ListBuffer高效遍历

package com.dt.scala.list

object ListBuffer_Internals {
  def main(args: Array[String]): Unit = {
    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] = {//比上边那种有较少的内存消耗。理论上讲支持所有元素个数。但是这里会产生很多种中间结果的list对象,效率是非常低的。
    var result = List[Int]()
    for(element <- list) result = result ::: List(element + 1)
    result
  }

  def increment_MostEffective(list: List[Int]) : List[Int] = {//最高效、既能够使用循环遍历,又会避免创建那么多的中间对象,就引入了ListBuffer
    import scala.collection.mutable.ListBuffer  //可变
    var buffer = new ListBuffer[Int]
    for(element <- list) buffer += element + 1
    buffer.toList
  }

  //ListBuffer源码:
//  def += (x:A) : this.type = {
//    if (exported) copy()
//    if (start.isEmpty){
//      last0 = new :: (x,Nil)
//      start = last0
//    } else {
//      val last1 = last0
//      last0 = new :: (x,Nil)
//      last1.tl = last0   //不断在后边追加成员
//    }
//    len += 1
//    this
//  }
//
//  override def toList:List[A] = {
//    exported = !start.isEmpty
//    start
//  }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-14 18:07:18

Scala中ListBuffer高效遍历的相关文章

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

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

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

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

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深入浅出实战经

第87讲:scala中使用For表达式做查询

今天我们来学习下如何用for表达式在scala中做查询. 先来看看示例代码 case class Book(title:String,authors:List[String]) object text_87 {   def main(args:Array[String]){ val books:List[Book] = List( Book("scala programming",List("zhangbanner","dongxicheng",

scala中的高阶函数

高阶函数 val list =List(1,2,3,4,5,6,7,8) val newList = list.map((x:Int) => 2*x) //map表示映射list中的每一个元素的值为原来的2倍 //newList中的值为 2,4,6,8,10,12,14,16 也可直接写成 val newList = list.map(x => 2*x) 也可等价写成 val newList = list.map(2*_) map函数相当于foreach 集合Set val s = Set(1

scala中常用但不常见(其他语言)的符号含义

本文旨在介绍Scala在其他语言中不太常见的符号含义,帮助理解Scala Code. 随着我对Scala学习的深入,我会不断增加该篇博文的内容,下面介绍Scala中的符号: :::三个冒号运算符:表示list的连接操作 val one = List(1,2,3) val two = List(4,5,6) val three = one:::two 输出结果为:three: List[Int] = List(1, 2, 3, 4, 5, 6) :: 两个冒号运算符:表示普通元素与list的连接操