例如,假设我想要一个包含0到最多1000个元素的列表。在此之上,应首先丢弃最旧的插入。集合本身是否支持此功能?如果不是,我将如何进行实施?我知道列表中的某些操作非常慢,所以我可能需要不同的数据类型吗?
查看元素不应该影响列表。我只想插入和调整操作。
答案 0 :(得分: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)
}
答案 1 :(得分:7)
听起来你想要一个大小有限的队列。这是一个类似的问题:Maximum Length for scala queue
该问题提出了三种解决方案。你可以,
Queue
。答案 2 :(得分:1)
循环数组是最快的实现。它基本上是一个带有读写索引的数组,它们在到达数组末尾时被包装。大小定义为:
def size = writeIndex - readIndex + (if (readIndex > writeIndex) array.size else 0)
答案 3 :(得分:0)
虽然没有回答问题的详细信息(但确实回答了问题的标题),但是List.fill(1000){0}
会创建一个长度为1000的List
,其初始值为0
,这是从
Scala - creating a type parametrized array of specified length