RingArray.java 733 B

12345678910111213141516171819202122232425262728293031323334
  1. package me.km.snuviscript;
  2. public class RingArray<T> {
  3. private int length = 0;
  4. private int index = 0;
  5. private final T[] data;
  6. public RingArray(int maxLength) {
  7. data = (T[]) new Object[maxLength];
  8. }
  9. public void add(T t) {
  10. data[index] = t;
  11. length = Math.min(length + 1, data.length);
  12. index = (index + 1) % data.length;
  13. }
  14. public int getLength() {
  15. return length;
  16. }
  17. public T get(int index) {
  18. if(index < 0 || index >= length) {
  19. return null;
  20. }
  21. index = (this.index - length + index + data.length) % data.length;
  22. return data[index];
  23. }
  24. public void clear() {
  25. index = 0;
  26. length = 0;
  27. }
  28. }