标签:
学习了Scala中List的实现内幕源码揭秘,ListBuffer(链表缓存)相当于List的一个工具类,List本身继承ListBuffer,拥有ListBuffer中非私有的方法。对List的操作其实有部分是通过ListBuffer完成的。exported为LiftBuffer中flag(default:false),当flag为true时,表明Buffer已进行了toList操作,此时再进行连接等操作时,会有copy链表的动作发生,消耗内存,在实际编程中应谨慎。
例子如下:
private var start:List[A] = Nil
private var last0: ::[A]=_
private exported:Boolean = false
private var len = 0
override def toList:List[A]={
exported = !start.isEmpty
start
}
def +=(x:A): this.type = {
if(exported)copy()
.....
}
标签:
原文地址:http://www.cnblogs.com/tom-lee/p/4719953.html