2012-11-22 3 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 '을 다시 출력하면 q1: 0,5,1,6,2,7,3,8,4,9q2: 9,8,7,6,5이 출력됩니다.

내 클래스는 모든 적절한 방법 enqueuedequeue는, peekisEmpty는, size는, doubleSize가 ... 내 방법 이름이 포함

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