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とarg2の値に設定された2つの整数が含まれています。data.lengthInsideメソッドはどのように機能しenqueueますか?Eventオブジェクトのサイズを正しく取得するにはどうすればよいですか?

4

2 に答える 2

2

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

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

ちなみに、Queue<E>配列の代わりにリンクリストや組み込みのキュー実装()を使うことを考えたことはありますか?

于 2012-04-30T13:43:08.167 に答える
1

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

于 2012-04-30T13:46:24.490 に答える