缓冲器
缓冲器(Buffer)是可变序列(mutable)的子类。
它不仅可以更新已存在的元素,并且还可以有效地实现插入、移除、增加元素到头部、尾部。
mutable.Buffer有两个子类:ArrayBuffer 和 ListBuffer 。
ArrayBuffer 的底层实现是数组,符合数组的特征。
ListBuffer 的底层由 List实现,符合链表的特征。
缓冲器Buffer是为了解决写入的速率不一致而产生的,把分散的写操作先放到缓冲器,然后集中进行写操作。
或者对于两个不同系统的数据交换,如果了两者之间的处理速度不一样,则可以将待处理的数据放到缓冲区中。
增加元素
package main object Test { def main(args: Array[String]): Unit = { val buffer = scala.collection.mutable.Buffer(1, 2, 2, 3); println(buffer.getClass.getName); //scala.collection.mutable.ArrayBuffer println(buffer); //ArrayBuffer(1, 2, 2, 3) //添加到尾部 println( buffer :+ 5 //返回新的集合 ); //ArrayBuffer(1, 2, 2, 3, 5) //添加到头部 println( 6 +: buffer //返回新的集合 ); //ArrayBuffer(6, 1, 2, 2, 3)
//增加集合到尾部 println( buffer ++ Set(4, 5, 6, 5) //返回新的集合 ); //ArrayBuffer(1, 2, 2, 3, 4, 5, 6) println( buffer ++ List(4, 5, 6, 5) //返回新的集合 ); //ArrayBuffer(1, 2, 2, 3, 4, 5, 6, 5)
//增加集合到头部 println( Set(7, 7, 8, 9) ++: buffer //返回新的集合 ); //ArrayBuffer(7, 8, 9, 1, 2, 2, 3) println( List(7, 7, 8, 9) ++: buffer //返回新的集合 ); //ArrayBuffer(7, 7, 8, 9, 1, 2, 2, 3) } }
以上方法所返回的是新的 Buffer,而不是对原始的 Buffer进行修改。
根据待添加元素在操作符的位置不同,会将元素增加到新的Buffer 的头部或尾部。
package main object Test { def main(args: Array[String]): Unit = { val buffer = scala.collection.mutable.Buffer(1, 2, 2, 3); println(buffer.getClass.getName); //scala.collection.mutable.ArrayBuffer println(buffer); //ArrayBuffer(1, 2, 2, 3) //添加到尾部 println( buffer += 9 ); //ArrayBuffer(1, 2, 2, 3, 9) //添加到头部 println( 6 +=: buffer ); //ArrayBuffer(6, 1, 2, 2, 3, 9) //增加集合到尾部 println( buffer ++= Set(10, 20, 30, 30) ); //ArrayBuffer(6, 1, 2, 2, 3, 9, 10, 20, 30) println( buffer ++= List(70, 80, 90, 80) ); //ArrayBuffer(6, 1, 2, 2, 3, 9, 10, 20, 30, 70, 80, 90, 80) //增加集合到头部 println( Set(0, 1, 0, 2, 3, 0) ++=: buffer ); //ArrayBuffer(0, 1, 2, 3, 6, 1, 2, 2, 3, 9, 10, 20, 30, 70, 80, 90, 80) println( List(0, 10, 0, 20, 0, 30) ++=: buffer ); //ArrayBuffer(0, 10, 0, 20, 0, 30, 0, 1, 2, 3, 6, 1, 2, 2, 3, 9, 10, 20, 30, 70, 80, 90, 80) } }
以上方法返回的 Buffer 和 原始的 Buffer 是同一个对象。
package main object Test { def main(args: Array[String]): Unit = { val buffer = scala.collection.mutable.Buffer(1, 2, 2, 3); println(buffer.getClass.getName); //scala.collection.mutable.ArrayBuffer println(buffer); //ArrayBuffer(1, 2, 2, 3) //添加元素到尾部 buffer.append(99); println(buffer); //ArrayBuffer(1, 2, 2, 3, 99) //添加元素到头部 buffer.prepend(0); println(buffer); //ArrayBuffer(0, 1, 2, 2, 3, 99) //添加集合到尾部 buffer.append(4, 5, 6); println(buffer); //ArrayBuffer(0, 1, 2, 2, 3, 99, 4, 5, 6) buffer.appendAll(Set(9, 8, 7, 9)) println(buffer); //ArrayBuffer(0, 1, 2, 2, 3, 99, 4, 5, 6, 9, 8, 7) buffer.appendAll(List(10, 20, 30, 20)); println(buffer); //ArrayBuffer(0, 1, 2, 2, 3, 99, 4, 5, 6, 9, 8, 7, 10, 20, 30, 20) //添加集合到头部 buffer.prependAll(List(1, 2, 3, 0, 0)); println(buffer); //ArrayBuffer(1, 2, 3, 0, 0, 0, 1, 2, 2, 3, 99, 4, 5, 6, 9, 8, 7, 10, 20, 30, 20) } }

浙公网安备 33010602011771号