package com.gr.project.util; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class CircularBuffer<T> { private T[] buffer; private volatile int cursor = 0; private final int capacity; public CircularBuffer(int capacity) { buffer = (T[]) new Object[capacity]; this.capacity = capacity; } public void add(T item) { synchronized (buffer) { buffer[(cursor++)%capacity] = item; } } public List<T> getContents() { List<T> returnedItems = new ArrayList<T>(); synchronized (buffer) { if (cursor > capacity) { for (int i= cursor % capacity; i<capacity; i++) { returnedItems.add(buffer[i]); } for (int i= 0; i<cursor % capacity; i++) { returnedItems.add(buffer[i]); } return returnedItems; } else { for (int i= 0; i<cursor; i++) { returnedItems.add(buffer[i]); } } } return returnedItems; } }