当前位置:首页 > 工具 > 正文内容

基于泛型的循环队列实现与应用

访客 工具 2026年5月27日 2

任务目标

设计并实现一个支持多种数据类型的队列结构,使用泛型机制保证类型安全,并完成基本的入队和出队操作验证。

知识点掌握

  • 理解Java泛型的基本原理及其在类定义中的作用
  • 掌握泛型类的声明方式及其实例化过程
  • 熟悉数组实现的循环队列逻辑

实现要求

1. 项目结构创建

新建一个标准Java应用程序,根包命名为GenericQueue。所有源文件需按以下目录结构组织:

GenericQueue/
└── src/
    ├── GenericQueue/
    │   └── Main.java
    └── GenericQueue/util/
        └── ArrayQueue.java

2. 泛型队列类设计(ArrayQueue)

GenericQueue.util包中定义名为ArrayQueue的泛型类,具体要求如下:

  • 使用内部数组存储元素,支持任意引用类型数据
  • 包含两个构造函数:
    • 无参构造:初始化容量为16的队列
    • 带参构造:接收整型参数作为队列大小,若值小于等于0则抛出IllegalArgumentException
  • 维护队头索引(front)、队尾索引(rear)以及当前元素数量(size)以管理队列状态
  • 提供以下公共方法:
    方法名参数返回类型功能说明
    isEmpty-boolean判断队列是否为空
    isFull-boolean判断队列是否已满
    addT itemvoid将指定元素添加至队尾,队满时抛出异常
    remove-T移除并返回队首元素,队空时抛出异常

代码实现

package GenericQueue.util;

public class ArrayQueue<T> {
    private T[] data;
    private int frontIndex;
    private int rearIndex;
    private int count;
    private int totalCapacity;

    public ArrayQueue() {
        this(16);
    }

    public ArrayQueue(int capacity) {
        if (capacity <= 0) {
            throw new IllegalArgumentException("队列容量必须大于零:" + capacity);
        }
        this.totalCapacity = capacity;
        this.count = 0;
        this.frontIndex = 0;
        this.rearIndex = 0;
        @SuppressWarnings("unchecked")
        T[] array = (T[]) new Object[capacity];
        this.data = array;
    }

    public boolean isEmpty() {
        return count == 0;
    }

    public boolean isFull() {
        return count == totalCapacity;
    }

    public void add(T element) {
        if (isFull()) {
            throw new IllegalStateException("无法添加元素,队列已满");
        }
        data[rearIndex] = element;
        rearIndex = (rearIndex + 1) % totalCapacity;
        count++;
    }

    public T remove() {
        if (isEmpty()) {
            throw new IllegalStateException("无法删除元素,队列为空");
        }
        T value = data[frontIndex];
        data[frontIndex] = null; // 帮助GC回收
        frontIndex = (frontIndex + 1) % totalCapacity;
        count--;
        return value;
    }
}

主类测试逻辑(Main)

GenericQueue包下创建Main类,用于验证队列功能:

package GenericQueue;

import GenericQueue.util.ArrayQueue;

public class Main {
    public static void main(String[] args) {
        ArrayQueue<Integer> queue = new ArrayQueue<>(10);

        System.out.println("测试进队: ");
        for (int i = 1; i < 20; i++) {
            if (!queue.isFull()) {
                queue.add(i);
                System.out.printf("[%d] added. \n", i);
            } else {
                System.out.printf("队列已满, [%d] 未添加。\n", i);
            }
        }

        System.out.println("测试出队: ");
        while (!queue.isEmpty()) {
            System.out.printf("[%d] removed.\n", queue.remove());
        }
    }
}

构建与提交说明

将整个项目的src目录打包为ZIP格式文件进行提交,确保包内包含正确的包路径和Java源码文件。

运行预期输出

测试进队: 
[1] added. 
[2] added. 
...
[10] added. 
队列已满, [11] 未添加。
...
队列已满, [19] 未添加。
测试出队: 
[1] removed.
[2] removed.
...
[10] removed.
    
标签: Java泛型

相关文章

Trojan服务器搭建与配置

一、整体架构(先对齐认知)Clash Meta (PC / iOS / Android)        ↓ TLS   Trojan Server (443)        ↓     InternetTrojan 的核心是: TLS + HTTPS 流量伪装 看起来像正常网站 非常适合...

Tailscale 的详细用法

Tailscale 是一种基于 WireGuard 协议 的 零配置 VPN(虚拟私有网络)服务,让设备之间能够 安全、加密地直接连接,就像它们在同一个本地网络一样。它的核心特点是 简单、安全、跨平台。Tailscale 非常适合 没有公网 IP、两台电脑不在同一局域网 的场景。 简单来说,Tailscale 是什么?Tailscale 是一款让你的各种设备(电脑、服务器、手机...

Clash Tun 模式 导致 爱快(iKuai SD-Wan)内网域名无法访问

一、Clash  DNS 配置dns:  enable: true  listen: 0.0.0.0:53  ipv6: true  enhanced-mode: redir-host  nameserver:    - 223.5.5.5    - 223.6.6.6iKuai 内网域名 ...

深入解析Node.js运行环境与异步I/O架构

深入解析Node.js运行环境与异步I/O架构

核心定义与价值Node.js本质上是一个JavaScript运行环境,而非编程语言或应用框架。它赋予了JavaScript脱离浏览器在服务端、命令行工具及网络应用中执行的能力。其核心意义在于:用单一语言打通前后端开发壁垒。基于事件驱动与非阻塞I/O的架构特性,Node.js在处理API网关、实时通信及微服务等I/O密集型场景时表现卓越,已成为现代后端工程的主流选择。浏览器沙箱限制1995年Java...

ADO.NET SQL参数化查询的最佳实践

在 ADO.NET 中执行 SQL 查询时,参数化查询是一种关键的安全措施和性能优化手段。它通过将 SQL 命令和用户提供的数据分开处理,有效防止了 SQL 注入攻击,并有助于数据库缓存执行计划。下面总结了几种常用的参数化查询方式。 1. 使用 SqlParameter 对象(推荐) 这是最推荐的参数化查询方式。通过显式创建 SqlParameter 对象,您可以精确控制参数的类...

基于ELK的日志集中化分析系统搭建

构建统一日志管理平台的必要性 在分布式架构中,各服务节点独立运行,日志分散存储于不同主机。传统通过命令行工具如grep、awk逐个检索日志的方式,在数据量庞大时效率极低,难以实现快速定位问题。为提升运维效率,需建立集中式日志处理体系,具备日志采集、传输、存储、分析与告警能力。 ELK技术栈核心组件解析 Elasticsearch:分布式搜索引擎,支持全文检索、实时数据分析和高可用集群部署,...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。