我有以下队列类:
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/