Juste déconner ici, avec des tampons circulaires. Est-ce une mise en œuvre judicieuse ou existe-t-il un moyen plus rapide/plus fiable d'écorcher ce chat?scala collections tampon circulaire
class CircularBuffer[T](size: Int)(implicit mf: Manifest[T]) {
private val arr = new scala.collection.mutable.ArrayBuffer[T]()
private var cursor = 0
val monitor = new ReentrantReadWriteLock()
def push(value: T) {
monitor.writeLock().lock()
try {
arr(cursor) = value
cursor += 1
cursor %= size
} finally {
monitor.writeLock().unlock()
}
}
def getAll: Array[T] = {
monitor.readLock().lock()
try {
val copy = new Array[T](size)
arr.copyToArray(copy)
copy
} finally {
monitor.readLock().unlock()
}
}
}
Puisque votre tampon est de taille fixe, utilisez un 'Array' comme représentation interne. – gzm0
Vous devriez également jeter un coup d'œil au disrupteur, il s'agit essentiellement d'un tampon circulaire https://github.com/LMAX-Exchange/disruptor – Noah
gzm0, je ne voulais pas allouer tout l'espace, à l'avance. C'est pourquoi j'ai une limite supérieure de taille mais utilise un ArrayBuffer en interne. Est-ce une mauvaise idée? – irishjava