2012-04-30 7 views
0

私は次きたキュークラス:test_queue.enqueue(new Event(arg1, arg2));キュー長

Eventオブジェクトが引数1の値に設定され、2つの整数を含んでいます。私はこのような方法のエンキューが呼び出す

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

arg2。 enqueueの内部メソッドdata.lengthはどのように機能しますか? Eventオブジェクトのサイズを正しく取得するにはどうすればよいですか?

+3

'data'は単なる配列(長さ)ですが、Eventのサイズは関係ありません。正確にはどういう意味ですか? – harold

+0

'length'フィールドの説明はこちらをご覧ください:http://stackoverflow.com/questions/5950155/java-arrays-length – maksimov

答えて

2

data.lengthは、配列(インスタンスフィールド)であるdataという要素の数を返します。あなたはCのsizeofのようなものを探しているかもしれませんが、私が知っている限り、Javaはそれを提供しません。

なぜあなたはそれを望みますか?アレイ内のヒープ上のオブジェクトにの参照しか格納しないので、各配列要素のサイズは基本的に一定です。

ところで、配列の代わりにリンクリストや組み込みキューの実装(Queue<E>)を使用することを考えましたか?

+0

使用可能なインタフェースがないため、組み込みキュー実装を使用できません。(モバイルJavaアプリケーション) – arge

+0

ようこそ。このサンプル実装は、あなたも役に立ちます: –

1

data.lengthは、静的配列データのサイズを返します。この場合、Queueコンストラクタに渡されたサイズです。エンキューメソッドについては、データ配列に要素自体を格納するのではなく、要素への参照とイベントのサイズに関係なく、参照は固定サイズであるため、イベント要素のサイズは必要ありません。オブジェクトフィールド(あなたが言及した2つの整数)が実際に設定されています。