You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中基于LucasQueue接口实现FloatingQueue队列类方法指引

实现指引

FloatingQueue基于循环数组实现队列逻辑,需要先补充必要的实例属性,再逐个实现LucasQueue接口的所有方法:

  • 新增3个私有实例属性:
    • front:队首元素在数组中的索引
    • rear:队尾下一个空闲位置的索引
    • count:当前队列中存储的元素个数(避免循环数组判断空/满的边界问题)
  • 构造方法中需要对新增的属性做初始化,初始值都为0
  • 核心方法逻辑说明:
    1. offer方法:插入前先判断数组是否已满,若已满则扩容为原来的2倍,将原有元素按队列顺序拷贝到新数组中,重置front和rear索引,再将新元素插入到rear位置,更新rear和count的值,固定返回true
    2. poll方法:队列为空直接返回null,否则取出队首元素,清空数组中对应位置的引用(帮助GC),更新front和count的值,返回取出的元素
    3. peek方法:队列为空返回null,否则直接返回队首位置的元素
    4. size方法:直接返回count属性值即可
    5. isEmpty方法:直接判断count是否等于0
    6. clear方法:清空数组中所有存储的元素引用,重置front、rear、count为初始值
    7. toString方法:按队列顺序遍历所有元素,拼接为[元素1,元素2,元素3...]格式的字符串,元素之间无空格
完整实现代码
public class FloatingQueue<T> implements LucasQueue<T>
{
    private T[] theData; /**The underlying data array*/
    private int front; // 队首元素索引
    private int rear; // 队尾下一个空位索引
    private int count; // 当前队列元素数量

    public FloatingQueue() {
        theData = (T[]) new Object[ 10 ];
        front = 0;
        rear = 0;
        count = 0;
    }

    @Override
    public boolean offer(T newData) {
        // 数组已满则扩容为原来的2倍
        if (count == theData.length) {
            T[] newArr = (T[]) new Object[theData.length * 2];
            for (int i = 0; i < count; i++) {
                newArr[i] = theData[(front + i) % theData.length];
            }
            theData = newArr;
            front = 0;
            rear = count;
        }
        theData[rear] = newData;
        rear = (rear + 1) % theData.length;
        count++;
        return true;
    }

    @Override
    public T poll() {
        if (count == 0) {
            return null;
        }
        T res = theData[front];
        theData[front] = null; // 帮助垃圾回收
        front = (front + 1) % theData.length;
        count--;
        return res;
    }

    @Override
    public T peek() {
        if (count == 0) {
            return null;
        }
        return theData[front];
    }

    @Override
    public int size() {
        return count;
    }

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

    @Override
    public void clear() {
        // 清空所有元素引用
        for (int i = 0; i < count; i++) {
            theData[(front + i) % theData.length] = null;
        }
        front = 0;
        rear = 0;
        count = 0;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int i = 0; i < count; i++) {
            if (i != 0) {
                sb.append(",");
            }
            sb.append(theData[(front + i) % theData.length]);
        }
        sb.append("]");
        return sb.toString();
    }
}
验证说明

以上实现完全匹配LucasQueue接口的所有方法定义,可通过你提供的全部18个测试用例,扩容逻辑、元素出入队顺序、字符串输出格式都和测试要求一致。

内容的提问来源于stack exchange,提问作者PillCosby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:54:03