缓冲器

缓冲器(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)
  }
}

 

posted @ 2019-07-25 03:44  茗::流  阅读(229)  评论(0)    收藏  举报
如有雷同,纯属参考。如有侵犯你的版权,请联系我。