Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的合并队列_Java_Queue - Fatal编程技术网

Java中的合并队列

Java中的合并队列,java,queue,Java,Queue,我想知道写一个方法来合并一个ArrayQueue和另一个队列而不从传递的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){} 这种方法似乎比通过两个队列并返回新

我想知道写一个方法来合并一个ArrayQueue和另一个队列而不从传递的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){}
这种方法似乎比通过两个队列并返回新的合并队列更难实现。谢谢


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

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

一个可能有助于您的细节是,在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;
}
公共无效合并(ArrayQmerge q){
Object[]数组=新对象[this.size()+q.size()];
int i;
INTO;
//交织元素
对于(i=0,o=0;i
既然您正在使用自己的自制
阵列队列
,那么这就是猜测

创建一个新的队列并返回,正如我认为您已经说过的那样,更简单、更高效,因为将元素插入到一个数组支持的结构中,需要将其余元素在每个插入操作中向下移动一个位置


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

值得注意的是:Java中没有
ArrayQueue
类。有
ArrayQueue
ArrayBlockingQueue
,但是-你是指其中一个吗?我创建了自己的ArrayQueue类,它实现了自己的队列类。ArrayQmerge类扩展了ArrayQueue类。这确实让任何人都难以回答您的问题。因为只有您才能看到
ArrayQueue