如何在Scala中实现固定大小的List?

del*_*ber 5 scala

例如,假设我想要一个包含0到最多1000个元素的列表.在此之上,应首先丢弃最旧的插入.集合本身是否支持此功能?如果不是,我将如何进行实施?我知道列表上的某些操作非常慢,所以我可能需要不同的数据类型?

查看元素不应该影响列表.我只想插入和大小操作.

del*_*ber 9

这是我的第一个传递实现,以防其他人发现它有用

import scala.collection._
import mutable.ListBuffer

class FixedList[A](max: Int) extends Traversable[A] {

  val list: ListBuffer[A] = ListBuffer()

  def append(elem: A) {
    if (list.size == max) {
      list.trimStart(1)
    }
    list.append(elem)
  }

  def foreach[U](f: A => U) = list.foreach(f)

}
Run Code Online (Sandbox Code Playgroud)


Kip*_*ros 7

听起来你想要一个大小有限的队列.这是一个类似的问题:scala队列的最大长度

该问题提出了三种解决方案.您可以,

  1. 从头开始编写队列(范例给出了代码),
  2. 通过子类化或扩展Scala的Queue实现
  3. 使用类型类扩展模式(又名"pimp my library")来扩展Scala Queue.