我们有时还会使用一种队列叫循环队列。如操作系统课程讲解生产者消费者模型时可以就会使用循环队列。环形队列通常使用数组实现。
public class CircleQueue<E> {
private E[] elements= (E[]) new Object[10];
private int size=0;
private int front=0;
private int tail=0;
public void add(E element){
if(size==elements.length){
throw new IndexOutOfBoundsException("队列已满");
}
elements[tail]=element;
tail=(tail+1)%elements.length;
size++;
}
public E poll(){
if(size==0){
throw new RuntimeException("队列为空");
}
E element=elements[front];
front=(front+1)%elements.length;
size--;
return element;
}
public boolean isEmpty(){
return front==tail;
}
public int size(){
return size;
}
public void clear(){
front=tail=0;
}
public E peek(){
if(front==tail){
return null;
}
return elements[front];
}
public String toString(){
StringBuilder sb=new StringBuilder();
sb.append("[ ");
if(front!=tail){
for(int i=front;i!=tail;i++){
sb.append(elements[i]+" ");
}
sb.append("]");
}else {
sb.append("null ]");
}
return sb.toString();
}
public static void main(String[] args) {
CircleQueue queue=new CircleQueue();
for(String s:"1 2 3 4".split(" ")){
queue.add(s);
}
System.out.println("队列中的元素:"+queue);
queue.poll();
System.out.println("队首元素:"+queue.peek());
queue.poll();
queue.poll();
queue.poll();
System.out.println(queue);
}
}
试试效果:
队列中的元素:[ 1 2 3 4 ]
队首元素:2
[ null ]
Process finished with exit code 0
来源:CSDN
作者:李太白不太白
链接:https://blog.csdn.net/qq_45036591/article/details/104127408