扩展队列使用新条目覆盖所有先前的条目

时间:2015-03-19 02:08:54

标签: java arrays multithreading queue overwrite

我编写了一个排队程序,允许用户将学生对象输入队列。以下是我遇到问题的代码部分:

private void resize(int max) {
    assert max >= numOfNodes;
    StudentListing[] temp = (StudentListing[]) new Object[max];
    for (int i = 0; i < numOfNodes; i++) {
        temp[i] = data[(front + i) % data.length];
    }
    data = temp;
    front = 0;
    rear = numOfNodes;
}

public void enqueue(StudentListing newNode) {
    if (numOfNodes == data.length) {
        resize(data.length * 2);
    }
    data[rear++] = newNode;
    if (rear == data.length) {
        rear = 0;
    }
    numOfNodes++;
}

我遇到的问题是,当我将新学生添加到队列中并且已满时,它会执行resize方法并使用新学生条目覆盖我之前的所有条目。

例如:名为John的学生被添加到队列中,最大大小为1.用户将另一个名为Tom的学生添加到队列中;它扩展了队列,但随后覆盖了John。最终结果是队列中有两个Tom而不是一个John和一个Tom。

我需要帮助找出如何阻止它覆盖,而是将所有先前的条目添加到新创建的扩展队列中,然后将新条目添加到所述队列的末尾。提前谢谢你:)

0 个答案:

没有答案