实现一个先进先出的队列类 MyQueue,并用测试类进行测试
时间: 2024-09-18 13:13:28 浏览: 47
C++利用链表模板类实现简易队列
要实现一个先进先出(First In, First Out, FIFO)的队列,我们可以使用 Java 中的 `LinkedList` 类,因为它支持在其两端进行插入和删除操作。这里我会提供一个基本的 `MyQueue` 类的实现,以及相应的测试类。
```java
import java.util.LinkedList;
public class MyQueue<T> {
private LinkedList<T> queue;
// 构造器
public MyQueue() {
queue = new LinkedList<>();
}
// 入队(添加元素)
public void enqueue(T element) {
queue.add(element);
}
// 出队(移除并返回头部元素)
public T dequeue() {
if (queue.isEmpty()) {
throw new IllegalStateException("Queue is empty");
}
return queue.removeFirst();
}
// 检查队列是否为空
public boolean isEmpty() {
return queue.isEmpty();
}
// 返回队列大小
public int size() {
return queue.size();
}
}
// 测试类 TestMyQueue
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class TestMyQueue {
@Test
void testEnqueueAndDequeue() {
MyQueue<Integer> queue = new MyQueue<>();
queue.enqueue(1); // 添加元素
queue.enqueue(2);
queue.enqueue(3);
assertEquals(1, queue.dequeue()); // 验证出队的第一个元素
assertEquals(2, queue.dequeue());
assertEquals(3, queue.dequeue());
assertTrue(queue.isEmpty()); // 队列应为空
}
@Test(expected = IllegalStateException.class)
void testDequeueWhenEmpty() {
MyQueue<Integer> queue = new MyQueue<>();
queue.dequeue(); // 队空时尝试出队,应抛出异常
}
}
```
在这个实现中:
- `MyQueue` 类定义了一个内部的 `LinkedList` 来存储数据,提供了 `enqueue`、`dequeue` 和相关的辅助方法如 `isEmpty` 和 `size`。
- `TestMyQueue` 类包含了一些测试用例,包括正常入队出队和队空时出队的异常情况。
运行这些测试可以帮助确保队列的行为符合预期。
阅读全文