scala List的遍历方式可谓是多种多样。

包括本身scala的List就已经存在的遍历之外,三种常用的遍历是 递归、循环、借助ListBuffer的循环  

1、递归的缺点很明显,每次要进行堆栈,1oW Int 的列表我的电脑就撑不住了。。。

2、循环的问题也是每次都要重新来一遍剩下的List【我说的是下面这种循环】

for(e <- list) result=result ::: List(e + 1)
result

3、使用ListBuffer进行可变操作,并且+=e 的操作更加直观和快速,不需要一直连接。当然最后需要 toList才可以


package main.scala.S_01_LIANTEST.Test1.ListTest

/**
  * Created by Postbird on 2016/10/8.
  */
object ListBufferTest1 extends App{
    var list=List(0,1,2,3,4,5)
    for( e <- 1 to 1000){
         list= e :: list
    }
//    println(increment(list))
//    println(incrementMoreEffective(list))
//    println(incrementMostEffective(list))
    //递归
    def increment(list:List[Int]):List[Int]=list match{
        case List()=>List()
        case head::tail=>head+1 :: increment(tail)
            //每次调用一个函数 产生一个堆栈
            // 如果数据一百万多 存在很恐怖的内存消耗
    }
    //循环
    def incrementMoreEffective(list:List[Int]):List[Int]={
        var result = List[Int]()
        for(e <- list) result=result ::: List(e + 1)
        result
    }
    //使用listbuffer的循环
    def incrementMostEffective(list:List[Int]):List[Int]={
        import scala.collection.mutable.ListBuffer
        var buffer = new ListBuffer[Int]
        for(e <- list) buffer +=e+1
        buffer.toList
    }
}