队列的队列长度

时间:2012-04-30 13:39:01

标签: 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;
    }

我将这个方法称为en {[{1}}

test_queue.enqueue(new Event(arg1, arg2));对象包含两个整数,这些整数设置为arg1和arg2的值。方法Event中的data.length如何工作? 如何才能正确获取Event对象的大小?

2 个答案:

答案 0 :(得分:2)

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

你为什么要这样?由于只将引用存储到数组中堆上的对象,因此每个数组元素的大小基本上是不变的。

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

答案 1 :(得分:1)

data.length将只返回静态数组数据的大小,因此在这种情况下,您传递给Queue构造函数的大小。至于enqueue方法,它不需要Event元素的大小,因为数据数组不存储元素本身,但是对元素的引用和引用具有固定大小,而不管事件是否实际上已经设置了对象字段(你提到的两个整数)。