2012-04-30 3 views
0

Я Следующий класс очереди:длина очереди объекта

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; 
    } 

я вызвать метод Enqueue как это: test_queue.enqueue(new Event(arg1, arg2));

Объект Event содержит два целых числа, которые установлены к значениям arg1 и арг2. Как data.length внутри метод enqueue работы? Как он может правильно определить размер объекта Event?

+3

'data' - это просто массив (с длиной), размер события не имеет значения, так что конкретно вы имеете в виду? – harold

+0

Посмотрите, пожалуйста, объяснение на поле 'length': http://stackoverflow.com/questions/5950155/java-arrays-length – maksimov

ответ

2

data.length возвращает вам количество элементов data, которое является вашим массивом (поле экземпляра). Возможно, вы ищете что-то вроде C's sizeof, но насколько я знаю, Java не предоставляет его.

Зачем вам это нужно? Поскольку вы храните только ссылки на объекты в куче в вашем массиве, размер каждого элемента массива в основном постоянный.

Кстати, вы думали использовать связанный список или встроенную реализацию очереди (Queue<E>) вместо массива?

+0

Хорошо, спасибо за объяснение. Я не могу использовать встроенную реализацию очереди, потому что у меня нет доступного интерфейса (приложение Mobile Java) – arge

+0

Добро пожаловать. Эта примерная реализация также может помочь вам: http://www.java2s.com/Code/Java/Collections-Data-Structure/SimpleQueueFIFObasedonLinkedList.htm –

1

data.length просто вернет размер данных статического массива, поэтому в этом случае вы передадите размер в конструктор очереди. Что касается метода enqueue, ему не нужен размер элементов Event, так как массив данных не хранит сами элементы, а ссылки на элементы и ссылки имеют фиксированный размер, независимо от того, произошло ли событие фактически были заданы поля объектов (два целых числа).

Смежные вопросы