java - 对象的队列长度

标签 java

我有以下队列类:

class Queue
{

    private Object[] data;
    private int numOfElements;
    private int head;
    private int tail;


    Queue(int size)
    {
        if (size <= 0)
            throw new IllegalArgumentException("Size must be greater or equals 0.");

        data = new Object[size];
        head = 0;
        tail = 0;
        numOfElements = 0;
    }

    void enqueue(Object obj)
    {
        data[tail] = obj;
        tail = (tail + 1) % data.length;

        if (numOfElements < data.length)
            numOfElements++;
    }

    Object dequeue()
    {
        if (numOfElements == 0)
            throw new EmptyQueueException();

        Object dequeuedObject = data[head];
        data[head] = null;
        head = (head + 1) % data.length;

        numOfElements--;

        return dequeuedObject;
    }

我像这样调用方法入队:test_queue.enqueue(new Event(arg1, arg2));

Event 对象包含两个整数,分别设置为 arg1 和 arg2 的值。 enqueue 方法中的 data.length 是如何工作的? 如何正确获取Event对象的大小?

最佳答案

data.length返回 data 的元素数量,这是您的数组(实例字段)。您可能正在寻找类似 C 的 sizeof 的东西,但据我所知Java并没有提供。

你为什么想要它?由于您仅存储对数组中堆上对象的引用,因此每个数组元素的大小基本上是恒定的。

顺便问一下,您是否考虑过使用链表或内置队列实现( Queue<E> )来代替数组?

关于java - 对象的队列长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10384645/

相关文章:

java - 可以在 Tomcat 上部署 WAR 后更改 JAR 文件吗?

java - 从存储库解析插件 'spring:boot' 的版本时出错

java - 即使输入相同,AES/CBC/NoPadding 是否会生成两个不同的密文?

java - 从给定数组创建逆序数组

Java循环算法

java - 使用hibernate 4和spring 3.x批量插入记录

java - 在 Java 中为 weka 增加堆大小

java - 使用 HttpConnection 的 Http Post 获取上传文件的进度

java - Sonar : How to use try-with-resources to close FileOutputStream

java - SonarQube - 为什么要在 catch 语句上设置 Coverage 指标