在Java中合并队列

时间:2012-11-21 20:33:55

标签: java queue

我想知道最好的方法是编写一个方法来合并ArrayQueue和另一个Queue,而不从传递的q中删除任何元素。

eg. queue1 = [1,2,3,4] and queue2 = [5,6,7,8,9,10].

调用queue1.mergeQs(queue2)时会创建queue1 = [1,5,2,6,3,7,4,8,9,10]queue2会保留[5,6,7,8,9,10]

    public void mergeQs(ArrayQmerge q){}

这种方式似乎比你传递两个队列并返回一个新的合并队列更难实现。感谢。

为了澄清,我正在寻找一种方法来交织两个队列中的元素。

3 个答案:

答案 0 :(得分:1)

可能对您有所帮助的一个细节是,在Java中相同类的不同对象之间可以看到私有字段 。这意味着只要您打算合并自己类的队列,您的代码就可以完全访问所有内部字段,例如用于存储元素的数组。

对于最简单的情况,所有元素都存储在一个线性数组中,队列头部位于索引零处,这样的事情可能就是一个开始:

public void mergeQs(ArrayQmerge q) {
    Object[] array = new Object[this.size() + q.size()];

    int i;
    int o;

    // Interleave elements
    for (i = 0, o = 0; i < this.size() && i < q.size(); ++i) {
        array[o++] = this.array[i];
        array[o++] = q.array[i];
    }

    // Copy the remaining elements
    while (i < this.size()) {
        array[o++] = this.array[i++];
    }

    while (i < q.size()) {
        array[o++] = q.array[i++];
    }

    this.array = array;
}

答案 1 :(得分:0)

您可以在merge方法中本地创建新的Queue,然后将您的类的队列分配给本地版本。

答案 2 :(得分:0)

由于您使用的是自己的自制ArrayQueue,因此这是猜想。

创建一个新队列并返回就像我认为你已经说过更简单,更有效,因为将元素插入到Array支持的结构中将涉及将每个插入操作的其余元素向下移动一个位置。

另一种方法是通过交换支持它的底层数组来实现public void mergeQs(ArrayQmerge q)。因此,您可以获得与返回新队列相同的简单实现,但具有相同的副作用。