0

像这样创建 2 个队列时:

    ArrayQueue q1 = new ArrayQueue();
    ArrayQueue q2 = new ArrayQueue();
    for (int i = 0; i < 5; i++) {
        q1.enqueue(new Integer(i));
    }
    for (int i = 5; i < 10; i++) {
        q2.enqueue(new Integer(i));
    }
    System.out.println("q1: " + q1);
    System.out.println("q2: " + q2);

它输出:q1: 4,3,2,1,0q2: 9,8,7,6,5

我需要一种将队列合并q2q1具有交错元素的队列的方法。因此,如果println'd 再次将输出:q1: 0,5,1,6,2,7,3,8,4,9q2: 9,8,7,6,5.

我的类包含所有适当的方法enqueue, dequeue, peek, isEmpty, size, doubleSize... 我的方法名称是:

    public void mergedQs(ArrayQueue q) {
    }

基本上我想将对象添加到两个队列中,然后第二个队列合并到第一个队列中(不仅仅是添加它们)。理想情况下,我想避免投射它们或使用 ArrayList,因为我希望它们保持队列。

4

1 回答 1

4

您可能会发现这很有用。它合并任意数量的队列。

public static <T> Queue<T> mergeQs(Queue<T> ... qs) {
    Queue<T> ret = new ConcurrentLinkedQueue<T>();
    boolean more;
    do {
        more = false;
        for (Queue<T> q : qs) 
            if (!q.isEmpty()) {
                ret.add(q.remove());
                more = true;
            }
    } while(more);
    return ret;
}
于 2012-11-22T12:51:13.963 回答