5
Chỉ cần làm phiền ở đây, với bộ đệm tròn. Đây có phải là một sự thực hiện hợp lý hoặc có một cách nhanh hơn/đáng tin cậy hơn để da mèo này?bộ sưu tập scala bộ đệm tròn
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()
}
}
}
Kể từ bộ đệm của bạn là kích thước cố định, sử dụng một 'Array' như đại diện nội bộ. – gzm0
Bạn cũng nên xem xét trình phá rối, về cơ bản nó là một bộ đệm tròn https://github.com/LMAX-Exchange/disruptor – Noah
gzm0, tôi không muốn phân bổ toàn bộ không gian, lên phía trước. Đó là lý do tại sao tôi đã có một giới hạn trên về kích thước nhưng sử dụng một ArrayBuffer nội bộ. đó có phải là ý tưởng tồi tệ không? – irishjava