java中泛型循环数组队列通过object[]存储元素、head/tail指针和取模运算实现高效入队、出队、查看队首及判空操作,兼顾类型安全与内存管理。

Java 中用泛型实现一个简单队列,核心是定义一个支持任意类型元素的类,并封装入队(enqueue)、出队(dequeue)、查看队首(peek)和判空(isEmpty)等基本操作。下面是一个基于数组的轻量级泛型队列实现,兼顾可读性与实用性。
定义泛型队列类(基于循环数组)
使用固定容量的数组 + 头尾指针,避免频繁扩容,同时通过取模实现循环利用空间:
<font color="#888">public class SimpleQueue<t> {
private final Object[] elements;
private int head; // 指向队首元素索引
private int tail; // 指向下一个入队位置
private final int capacity;
<pre class="brush:java;toolbar:false;">public SimpleQueue(int capacity) {
if (capacity <= 0) throw new IllegalArgumentException("Capacity must be positive");
this.capacity = capacity;
this.elements = new Object[capacity];
this.head = 0;
this.tail = 0;
}
// 入队:在 tail 处插入,tail 后移(循环)
public void enqueue(T item) {
if (size() == capacity) throw new IllegalStateException("Queue is full");
elements[tail] = item;
tail = (tail + 1) % capacity;
}
// 出队:返回 head 元素,并将 head 后移(循环)
@SuppressWarnings("unchecked")
public T dequeue() {
if (isEmpty()) throw new IllegalStateException("Queue is empty");
T item = (T) elements[head];
elements[head] = null; // 避免内存泄漏(对引用类型重要)
head = (head + 1) % capacity;
return item;
}
// 查看队首但不移除
@SuppressWarnings("unchecked")
public T peek() {
if (isEmpty()) throw new IllegalStateException("Queue is empty");
return (T) elements[head];
}
public boolean isEmpty() {
return head == tail;
}
public int size() {
return (tail - head + capacity) % capacity;
}
}
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
关键细节说明
-
泛型擦除处理:数组不能直接声明为
T[](因类型擦除),所以用Object[]存储,出队/查看时强制转型,并加@SuppressWarnings("unchecked")抑制警告——这是安全的,因为我们只存入T类型对象 -
循环逻辑:用
(index + 1) % capacity实现指针自动回绕,避免数组越界,也提升空间利用率 -
内存管理:出队后将
elements[head]置为null,防止对象被意外强引用导致无法回收(尤其对大对象或长生命周期队列很重要) - 边界检查:入队前检查是否满,出队/查看前检查是否空,抛出语义明确的异常,便于调试
使用示例
你可以这样使用它:
<font color="#888">SimpleQueue<string> queue = new SimpleQueue(3);
queue.enqueue("Hello");
queue.enqueue("World");
System.out.println(queue.peek()); // "Hello"
System.out.println(queue.dequeue()); // "Hello"
System.out.println(queue.size()); // 1
<p>SimpleQueue<integer> numQueue = new SimpleQueue(5);
numQueue.enqueue(100);
numQueue.enqueue(200);
System.out.println(numQueue.dequeue()); // 100</integer></p></string></font>
可选增强方向
- 支持动态扩容:当满时自动创建更大数组并复制元素(类似
ArrayList) - 添加迭代器:实现
Iterable<t></t>接口,支持 for-each 遍历 - 线程安全:用
synchronized或ReentrantLock包裹关键方法(注意性能开销) - 继承
Collection<t></t>:补全add、remove、contains等标准方法
这个实现不依赖任何 JDK 集合类,清晰展示了泛型、数组循环、类型安全等核心概念,适合学习和轻量场景使用。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










