今天学习下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学习内容