2012-11-22 35 views
0

當創建這樣2個隊列:Java數組隊列

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

我需要一種方法,將隊列q2合併到具有交錯元素的隊列q1中。 因此,如果println'd再次輸出:q1: 0,5,1,6,2,7,3,8,4,9q2: 9,8,7,6,5

我的類包含所有適當的方法enqueuedequeuepeekisEmptysizedoubleSize ......我的方法名稱爲:

public void mergedQs(ArrayQueue q) { 
    } 

基本上我想將對象添加到兩個隊列,然後合併第二個隊列放入第一個(不只是添加它們)。 理想情況下,我想避免投射它們或使用ArrayList,因爲我希望它們保持隊列。

+0

我建議你使用ConcurrentLikedDeque。這裏是它的API [ConcurrentLinkedDeque](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedDeque.html)。如果你已經有了一個類,比如enqueue,dequeue等方法,你可以將ConcurrentLinkedDeque包裝到你的類中,並將它用作存儲我們對象的主要數據結構。 – nikkatsa

回答

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; 
}