Java 中保存最后 N 个元素的大小受限队列

作者:编程家 分类: java 时间:2025-07-28

Java 中保存最后 N 个元素的大小受限队列

Java 中的队列(Queue)是一种常用的数据结构,用于保存一系列元素,并按照先进先出(FIFO)的顺序进行操作。在某些情况下,我们可能需要保存队列中最后 N 个元素,并且限制队列的大小不超过 N。为了解决这个问题,我们可以使用 Java 提供的受限队列(Limited Queue)的实现。

什么是受限队列?

受限队列是一种特殊的队列,它在添加元素时会检查队列的大小,并在超过限制大小时自动删除最早的元素。这种队列的特点是保持指定大小的队列,并且始终保存最后添加的 N 个元素。

实现一个保存最后 N 个元素的受限队列

下面是一个示例代码,展示了如何使用 Java 实现一个保存最后 N 个元素的受限队列:

java

import java.util.LinkedList;

public class LimitedQueue {

private final int maxSize;

private final LinkedList queue;

public LimitedQueue(int maxSize) {

this.maxSize = maxSize;

this.queue = new LinkedList<>();

}

public void add(T element) {

queue.addLast(element);

if (queue.size() > maxSize) {

queue.removeFirst();

}

}

public T get(int index) {

return queue.get(index);

}

public int size() {

return queue.size();

}

}

在上面的代码中,我们使用了一个 LinkedList 来保存元素,并且使用 maxSize 变量来限制队列的大小。在添加元素时,我们首先将元素添加到队列的末尾,然后检查队列的大小是否超过限制。如果超过限制,则删除队列中最早添加的元素(即队列的头部元素)。

使用受限队列保存最后 N 个元素的案例

假设我们有一个需求,要求保存最近 3 个用户登录的记录,并且每当有新用户登录时,需要将最早登录的用户记录删除。我们可以使用受限队列来实现这个需求。

java

public class Main {

public static void main(String[] args) {

LimitedQueue loginRecords = new LimitedQueue<>(3);

loginRecords.add("User1");

loginRecords.add("User2");

loginRecords.add("User3");

loginRecords.add("User4");

System.out.println("最近登录的用户记录:");

for (int i = 0; i < loginRecords.size(); i++) {

System.out.println(loginRecords.get(i));

}

}

}

在上面的代码中,我们创建了一个 LimitedQueue 对象来保存登录记录,并设置最大大小为 3。然后我们添加了 4 个用户登录记录,超过了限制大小,因此最早的登录记录 "User1" 被删除。最后,我们遍历队列中的元素,并打印出最近登录的用户记录。

通过使用受限队列,我们可以方便地保存最后 N 个元素,并且在超过限制大小时自动删除最早的元素。这种数据结构在很多场景下都非常有用,例如保存最近的日志记录、保留最新的消息等。