2011-08-15 23 views
4

例如,假设我想要一个包含0到最多1000个元素的列表。在此之上,应该先丢弃最早的插入。本集合是否支持此功能?如果不是,我将如何去执行?我知道某些操作在列表上很慢,所以我可能需要不同的数据类型?我该如何在Scala中实现一个固定大小的List?

查看一个元素不应该影响列表。我只想插入和尺寸操作。

+0

1.你删除列表中的(普通)元素,当你看呢? (我正在寻找规模庞大的队列)2.你是否了解你需要的操作? – huitseeker

+0

修改后的额外信息 – deltanovember

+0

您不需要*查看列表元素吗?在所有?如果是这样,你是否想要开始查看列表头部(最后一个输入?),尾部(最老的元素?)或任何元素,通过索引访问? – huitseeker

回答

7

这听起来像你想要一个大小有限的队列。这里有一个类似的问题:Maximum Length for scala queue

在这个问题中有三种解决方案。您可以

  1. 从头开始写一个队列(范式给这个代码),
  2. 由子类扩展Scala的Queue实现,或
  3. 使用类型类扩展模式(也称为“皮条客我的图书馆”)扩展Scala的Queue
1

圆形阵列是最快的实现。它基本上是一个具有读写索引的数组,它在到达数组末尾时被封装。尺寸定义为:

def size = writeIndex - readIndex + (if (readIndex > writeIndex) array.size else 0) 
7

下面是万一别人我第一遍实现觉得有用

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) 

} 
相关问题