Java中的合并队列
我想知道写一个方法来合并一个ArrayQueue和另一个队列而不从传递的q中删除任何元素的最好方法是什么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){} 这种方法似乎比通过两个队列并返回新
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
。