java队列如何实现
Java队列的实现方式
Java中队列(Queue)可以通过多种方式实现,包括使用内置的集合框架类或自定义实现。以下是常见的实现方法:
使用LinkedList实现队列
LinkedList实现了Queue接口,可以直接作为队列使用:
Queue<String> queue = new LinkedList<>();
queue.add("A"); // 入队
queue.offer("B"); // 推荐使用的入队方法
String element = queue.remove(); // 出队
String peekElement = queue.peek(); // 查看队首元素
使用ArrayDeque实现队列
ArrayDeque是双端队列实现,作为队列使用时比LinkedList更高效:
Queue<Integer> queue = new ArrayDeque<>();
queue.offer(1);
queue.offer(2);
int first = queue.poll();
使用PriorityQueue实现优先队列
PriorityQueue提供优先级队列实现,元素按自然顺序或Comparator排序:
Queue<Integer> pq = new PriorityQueue<>();
pq.offer(5);
pq.offer(1);
pq.offer(3);
// 出队顺序将是1,3,5
使用数组实现循环队列
自定义循环队列实现可以避免数组移动的开销:
class CircularQueue {
private int[] elements;
private int front, rear, size;
public CircularQueue(int capacity) {
elements = new int[capacity];
}
public boolean enqueue(int value) {
if (size == elements.length) return false;
elements[rear] = value;
rear = (rear + 1) % elements.length;
size++;
return true;
}
public int dequeue() {
if (size == 0) throw new RuntimeException("Queue is empty");
int value = elements[front];
front = (front + 1) % elements.length;
size--;
return value;
}
}
使用阻塞队列实现
Java并发包提供了多种阻塞队列实现:
BlockingQueue<String> bq = new LinkedBlockingQueue<>(10);
// 生产者线程
bq.put("message");
// 消费者线程
String msg = bq.take();
队列接口的主要方法
Queue接口定义了几个关键方法:
offer(E e):添加元素到队列,推荐使用poll():移除并返回队首元素peek():查看但不移除队首元素add(E e)和remove():与offer/poll类似,但可能抛出异常
选择具体实现时应考虑:

- 是否需要线程安全
- 是否需要优先级排序
- 对性能的要求
- 队列容量是否需要限制
对于大多数应用场景,ArrayDeque或LinkedList作为队列实现已经足够。并发环境下应考虑使用java.util.concurrent包中的线程安全队列实现。






