Java 中的队列(Queue)是一种常用的数据结构,用于保存一系列元素,并按照先进先出(FIFO)的顺序进行操作。在某些情况下,我们可能需要保存队列中最后 N 个元素,并且限制队列的大小不超过 N。为了解决这个问题,我们可以使用 Java 提供的受限队列(Limited Queue)的实现。什么是受限队列?受限队列是一种特殊的队列,它在添加元素时会检查队列的大小,并在超过限制大小时自动删除最早的元素。这种队列的特点是保持指定大小的队列,并且始终保存最后添加的 N 个元素。实现一个保存最后 N 个元素的受限队列下面是一个示例代码,展示了如何使用 Java 实现一个保存最后 N 个元素的受限队列:
javaimport 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 个用户登录的记录,并且每当有新用户登录时,需要将最早登录的用户记录删除。我们可以使用受限队列来实现这个需求。
javapublic 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 个元素,并且在超过限制大小时自动删除最早的元素。这种数据结构在很多场景下都非常有用,例如保存最近的日志记录、保留最新的消息等。