Nur herumspielen, mit kreisförmigen Puffern. Ist das eine sinnvolle Umsetzung oder gibt es eine schnellere/zuverlässigere Methode, diese Katze zu häuten?scala collections circular buffer
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()
}
}
}
Da Ihr Puffer fester Größe ist, verwenden Sie eine 'Array' als interne Darstellung. – gzm0
Sie sollten auch einen Blick auf den Disruptor werfen, es ist im Grunde ein Ringspeicher https://github.com/LMAX-Exchange/disruptor – Noah
gzm0, ich wollte nicht den gesamten Speicherplatz, im Voraus reservieren. Deshalb habe ich eine Obergrenze für die Größe, verwende aber intern einen ArrayBuffer. Ist das eine schlechte Idee? – irishjava