2012-04-30 142 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; 
    } 

我稱這樣的方法排隊:test_queue.enqueue(new Event(arg1, arg2));

Event對象包含被設置爲Arg1的值和兩個整數ARG2。方法enqueue中的data.length如何工作? 它如何正確獲取Event對象的大小?

+3

'data'只是一個數組(長度),Event的大小是無關緊要的,那麼究竟是什麼意思? – harold

+0

在這裏尋找有關'長度'字段的解釋:http://stackoverflow.com/questions/5950155/java-array-length – maksimov

回答

2

data.length返回您的元素數data,這是您的數組(實例字段)。您可能正在尋找類似於C的sizeof,但據我所知Java不提供它。

爲什麼你想要它?由於您只將引用存儲到數組堆中的對象,因此每個數組元素的大小基本上是不變的。

順便說一句,你有沒有想過使用鏈表或內置隊列實現(Queue<E>)而不是數組?

+0

好的,thx的解釋。我無法使用內置的隊列實現,因爲我沒有可用的接口(Mobile Java應用程序) – arge

+0

不客氣。此示例實現也可能對您有所幫助:http://www.java2s.com/Code/Java/Collections-Data-Structure/SimpleQueueFIFObasedonLinkedList.htm –

1

data.length將剛剛返回靜態數組數據的大小,所以在這種情況下,您傳遞給隊列構造函數的大小。至於enqueue方法,它不需要Event元素的大小,因爲數據數組本身不存儲元素,而是引用元素,並且引用的大小是固定的,無論事件是否爲對象字段(您提到的兩個整數)實際上已被設置。