数据结构入门:队列概念、实现与实战应用(Java 版)
队列作为编程核心数据结构之一,在 Java 开发、算法题解中应用广泛。本文从零基础视角,结合 Java 语法特性,带你吃透队列的核心概念、手写实现和实战用法,所有代码均可直接编译运行。
一、什么是队列?
生活中的'排队'场景(食堂打饭、银行办业务)完美契合队列的核心逻辑:先来先服务。对应数据结构中,队列(Queue)是遵循 先进先出(FIFO, First In First Out) 原则的线性表:
- 数据只能从队尾(Rear) 入队(add/offer);
- 数据只能从队首(Front) 出队(remove/poll);
- 不允许在队列中间插入 / 删除元素。
二、队列的核心操作(Java 规范)
结合 Java 的接口设计,队列核心操作分为两类(推荐使用非阻塞方法):
| 操作 | 阻塞 / 抛异常方法 | 非阻塞 / 返回值方法 | 说明 |
|---|---|---|---|
| 入队 | add(E e) | offer(E e) | 队尾添加元素,满时前者抛异常、后者返回 false |
| 出队 | remove() | poll() | 移除并返回队首,空时前者抛异常、后者返回 null |
| 查看队首 | element() | peek() | 查看队首(不删除),空时前者抛异常、后者返回 null |
| 判断是否为空 | isEmpty() | - | 返回 boolean 值 |
| 获取长度 | size() | - | 返回队列元素个数 |
三、队列的手写实现(Java 版)
我们先实现基础顺序队列,再解决'假溢出'问题的循环队列,理解底层原理后,再讲 Java 内置队列的使用。
3.1 基础顺序队列(基于数组 / ArrayList)
import java.util.ArrayList;
import java.util.NoSuchElementException;
/**
* 基于 ArrayList 实现的基础顺序队列(泛型版,适配任意数据类型)
* 优点:实现简单;缺点:出队时删除队首元素,后续元素需移动,时间复杂度 O(n)
*/
public class ArrayQueue<E> {
// 存储队列元素的容器
private final ArrayList<E> items;
// 构造方法:初始化空队列
public ArrayQueue() {
items = new ArrayList<>();
}
/**
* 判断队列是否为空
*/
{
items.isEmpty();
}
{
items.add(item);
;
}
E {
(isEmpty()) {
;
}
items.remove();
}
E {
(isEmpty()) {
();
}
items.remove();
}
E {
(isEmpty()) {
;
}
items.get();
}
E {
(isEmpty()) {
();
}
items.get();
}
{
items.size();
}
{
ArrayQueue<String> queue = <>();
queue.offer();
queue.offer();
queue.offer();
System.out.println( + queue.isEmpty());
System.out.println( + queue.size());
System.out.println( + queue.peek());
System.out.println( + queue.poll());
System.out.println( + queue.peek());
System.out.println( + queue.size());
}
}


