たとえば、0〜最大1000個の要素を含むリストが必要であるとします。この上に、最も古い挿入を最初に削除する必要があります。コレクションはこの機能をネイティブにサポートしていますか?実装についてどうすればいいですか?特定の操作がリスト上で非常に遅いことを理解しているので、別のデータ型が必要なのかもしれません。Scalaで固定サイズのリストを実装するにはどうすればよいですか?
要素を見るとリストに影響しないはずです。私は挿入とサイズの操作だけをしたいです。
たとえば、0〜最大1000個の要素を含むリストが必要であるとします。この上に、最も古い挿入を最初に削除する必要があります。コレクションはこの機能をネイティブにサポートしていますか?実装についてどうすればいいですか?特定の操作がリスト上で非常に遅いことを理解しているので、別のデータ型が必要なのかもしれません。Scalaで固定サイズのリストを実装するにはどうすればよいですか?
要素を見るとリストに影響しないはずです。私は挿入とサイズの操作だけをしたいです。
サイズに拘束されたキューが必要なようです。これに似た質問があります:Maximum Length for scala queue
この質問には3つの解決策があります。あなたは、
Queue
を拡張します。円形アレイは最も速い実装です。これは、基本的に配列の終わりに達するとラップされる読み込みと書き込みのインデックスを持つ配列です。サイズは次のように定義されています
def size = writeIndex - readIndex + (if (readIndex > writeIndex) array.size else 0)
ここでは他の誰かが、あなたがそれを見たときに、リストの(通常の)要素を削除してくださいそれに有用
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.見つける場合には、私の最初のパスの実装ですか? (私はサイズに拘束されたキューを見ています)2.あなたが必要とする操作についての考えがありますか? – huitseeker
追加情報で修正されました – deltanovember
リスト要素を*見る*必要はありませんか?全く?その場合は、リストの先頭(最後に入力したもの)、末尾(最古の要素?)、またはインデックスを介してアクセスされる要素を調べ始めますか? – huitseeker