/**
* @author qcg
* @version 2019/5/13.
* @description 基于数组实现的队列
* 队列的类型:顺序队列、链式队列、循环队列、阻塞队列、并发队列
*/
public class MyArrayQueue {
private String[] items;
// 队列大小
private int size = 0;
// 头下标
private int head = 0;
// 尾下标
private int tail = 0;
public MyArrayQueue(int capacity) {
items = new String[capacity];
size = capacity;
}
/**
* 入队
*
* @param item 入队元素
* @return 是否成功
*/
public boolean enqueue(String item) {
// 表示队列已满
if (tail == size) return false;
items[tail] = item;
++tail;
return true;
}
/**
* 出队
*
* @return 队列头元素
*/
public String dequeue() {
// 队列为空,返回null
if (head == tail) return null;
String res = items[head];
++head;
return res;
}
/**
* 打印队列
*/
public void output() {
// 不能这么写,得通过head和tail去遍历
// System.out.println(Arrays.toString(items));
System.out.print("[");
for(int i = head; i < tail; i++){
System.out.print(items[i]);
if(i != tail-1){
System.out.print(" ");
}
}
System.out.print("]");
}
public static void main(String[] args) {
MyArrayQueue queue = new MyArrayQueue(3);
queue.enqueue("1");
queue.enqueue("2");
queue.enqueue("3");
queue.dequeue();
queue.output();
}
}
应用场景:
1.线程池,过多的连接请求过来时,通过队列去排队等待
2.生产者-消费者(阻塞队列)