package com.interview.books.question300; /** * Created_By: stefanie * Date: 15-1-20 * Time: 下午3:10 */ public class TQ44_CyclicBuffer<T> { T[] buffer; int size; int begin; int end; public TQ44_CyclicBuffer(int capacity){ buffer = (T[]) new Object[capacity]; begin = 0; end = 0; size = 0; } private int next(int index){ return (index + 1) % buffer.length; } public void push(T element){ if(size >= buffer.length) throw new RuntimeException("Buffer is Full"); buffer[end] = element; end = next(end); size++; } public T poll(){ if(size == 0) throw new RuntimeException("Buffer is Empty"); T element = buffer[begin]; begin = next(begin); size--; return element; } public static void main(String[] args){ TQ44_CyclicBuffer<Integer> buffer = new TQ44_CyclicBuffer(3); buffer.push(1); buffer.push(2); buffer.push(3); try{ buffer.push(4); } catch (RuntimeException e){ System.out.println(e.getMessage()); //Buffer is Full } System.out.println(buffer.poll()); //1 buffer.push(4); System.out.println(buffer.poll()); //2 System.out.println(buffer.poll()); //3 System.out.println(buffer.poll()); //4 try{ buffer.poll(); } catch (RuntimeException e){ System.out.println(e.getMessage()); //Buffer is Empty } } }