general java
CircularFifoBuffer 예제
'김용환'
2017. 11. 1. 17:41
apache commons에 CircularFifoBuffer 클래스가 있다.
첫번째 예시 코드이다.
object Test extends App {
import org.apache.commons.collections.buffer.CircularFifoBuffer
val tasks = new CircularFifoBuffer(10)
tasks.add(1)
tasks.add(2)
tasks.add(5)
tasks.add(6)
println("max size : " + tasks.maxSize)
println("size: " + tasks.size)
println("--get")
println(tasks.get())
println(tasks.get())
println(tasks.get())
println(tasks.get())
println("--remove")
println(tasks.remove)
println(tasks.remove)
println(tasks.remove)
println(tasks.remove)
println("-- error")
println(tasks.remove)
}
가지고 있는 buffer보다 더 많이 remove하면 exception이 발생한다.
get을 호출하면 계속 첫번째 엘리먼트를 리턴한다. 현재 값 확인할 때 좋을 듯 하다.
max size : 10
size: 4
--get
1
1
1
1
--remove
1
2
5
6
at org.apache.commons.collections.buffer.BoundedFifoBuffer.remove(BoundedFifoBuffer.java:275)
두 번째 예시 코드이다.
object Test extends App {
import org.apache.commons.collections.buffer.CircularFifoBuffer
val tasks = new CircularFifoBuffer(10)
tasks.add(1)
tasks.add(2)
tasks.add(3)
tasks.add(4)
tasks.add(5)
tasks.add(6)
tasks.add(7)
tasks.add(8)
tasks.add(9)
tasks.add(10)
tasks.add(11)
tasks.add(12)
println("max size : " + tasks.maxSize)
println("size: " + tasks.size)
for(i <- tasks.toArray) {
println(tasks.remove)
}
}
데이터를 계속 추가하면 처음에 들어온 데이터는 삭제된다. overflow가 발생되지 않는다.
max size : 10
size: 10
3
4
5
6
7
8
9
10
11
12