如何在 Java 中实现保存最后 N 个元素的大小受限队列?

javaobject oriented programmingprogramming更新于 2025/1/25 19:56:17

简介

队列是 Java 中的接口。它用于在一端插入元素并从另一端移除元素。它使用 FIFO 原则进行处理。队列扩展了 Collection 框架,并在 Java.util 接口中定义。

在本教程中,我们将了解 Java 中大小受限队列的实现。

什么是 Java 中的大小受限队列?

大小受限队列是固定大小为 N 的队列。它不能容纳超过其大小的元素。如果您尝试推送更多数据,它将从其前端删除元素。队列的大小固定为 N。

大小受限队列使用 Linked List 类实现,具有 Java 中简单队列的所有基本方法。

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

我们正在实现一种方法,通过覆盖队列的 add() 方法,将元素添加到大小受限队列中,直到队列达到最后大小。

大小受限队列的语法

Queue<data_type>队列名称 = new SizeLimitedQueue<>()

代码中使用的方法的语法

  • add()= 队列名称.add()

  • size()= 队列名称.size()

  • peek()= 队列名称.peek()

算法

步骤 1:通过扩展 Linked 列表类来初始化队列

步骤 2:声明一个变量来检查队列的大小。

步骤 3:重写 add() 方法:当队列达到其最大大小时,通过移除前面的元素来添加新元素。

步骤4:打印队列。

示例

import java.util.LinkedList;
import java.util.Queue;
  
public class SVQ  {
   //大小受限队列扩展了链接列表类
   public static class SizeLimitedQueue<E> extends LinkedList<E> {
        
      //声明一个大小受限队列的变量来检查队列大小
      private int QueueVariable;
   
      //初始化构造函数方法
      public SizeLimitedQueue(int QueueVariable) {
         this.QueueVariable = QueueVariable;
      }
   
      //overriding the add() method of Queue, so that Queue adds elements to the QueueVariable else                           remove the front element and add a new element.       
      @Override
      public boolean add(E o) {
  
         //如果队列达到其最大大小,则删除前面的元素
         while (this.size() == QueueVariable) {
   
            super.remove();
         }
         super.add(o);
         return true;
      }
   }
  
   public static void main(String[] args) {
        //初始化一个大小为 4 的 Size 受限队列
        Queue<Integer> sq = new SizeLimitedQueue<>(4);
        
        //将元素 {0, 1, 2, 3, 4, 5} 添加到队列
        for (int x = 0; x < 6; x++)
        
        sq.add(x);
        
        //打印队列的大小
        int size = sq.size();
        System.out.println("Size ofqueue-" + size);
        
        //打印队列元素,队列有 {2, 3, 4, 5},由于队列大小,{0, 1} 被删除
        System.out.println("Elements ofqueue" + sq);
        
        //删除队列前端元素
        int h = sq.remove();
        System.out.println("Removed element-" + h);
        System.out.println("队列元素" + sq);
        
        //打印队列头部
        int hq = sq.peek();
        System.out.println("队列头部-" + hq);
        
        //将 6,7 添加到队列
        for (int x = 6; x < 8; x++)
        sq.add(x);
        
        System.out.println("队列元素" + sq);
  
   }
}

输出

Size of queue-4
Elements of Queue [2, 3, 4, 5]
Removed element-2
Elements of queue [3, 4, 5]
Head of queue-3
Element of queue [4, 5, 6, 7]

解释

在上述代码中 -

  • 扩展了一个 Linked list 类,以实现大小为 4 的受限队列 pq。

  • 定义一个变量 QueueVariable 来控制定义队列的大小。

  • 重写 add 方法,以便每次只在队列 pq 中添加 4 个元素。如果添加了新元素,队列将删除前面的元素。

  • 将 0、1、2、3、4、5 添加到队列。pq 将只存储 4 个元素,同时删除前面的元素。结果队列元素为 [2, 3, 4, 5]。

  • 从队列中删除前面的元素 2。现在,队列 (pq) 只有 3 个元素 [3, 4, 5],它有 1 个新数据的位置。

  • 再次将元素 6 和 7 添加到队列。

  • 队列 pq 只有一个空间,因此要添加 6 和 7,pq 将删除头元素 [3] 并存储 [4, 5, 6, 7]

结论

我们实现了一种方法来在 java 中定义一个大小受限的队列,大小为 N。我希望本教程适合您。


相关文章


有用资源