2017-10-30 5 views
0

私は1つ1つのデータをスタックにプッシュし、キューにデータを追加すると、並べ替えなしで保存されますが、ループを使用してこれらの同じデータをスタックにプッシュし、もう一つは、スタックデータを1つずつスタックにプッシュするときに、ストアデータを1つずつ並べ替えるだけですが、キューにはランダムにデータが格納されます。スタックとキューにデータストアを格納する方法を理解できませんか? ここでコード:データをJavaのスタックとキューに格納する方法は?

import java.util.PriorityQueue; 
import java.util.Queue; 
import java.util.Stack; 

public class Stack_Queue_RealtionTwo { 

    public static void main(String[] args) { 

     Stack<Integer> stack = new Stack<>(); 
     Queue<Integer> queue = new PriorityQueue<Integer>(); 

     stack.push(5); 
     stack.push(2); 
     stack.push(3); 
     stack.push(1); 
     stack.push(4); 
     stack.push(6); 

     queue.add(5); 
     queue.add(2); 
     queue.add(3); 
     queue.add(1); 
     queue.add(4); 
     queue.add(6); 

     System.out.println("STACK: " + stack + "\nQUEUE: " + queue); 
     System.out.println("\nAFTER POP AND POLL\n"); 
     System.out.println("STACK: " + stack.pop() + "\nQUEUE: " + queue.poll()); 

     stack.clear(); 
     queue.clear(); 

     ///using loop 
     int[] x = {5, 2, 3, 1, 4, 6}; 

     for (int i = 0; i <= x.length; i++) { 
      stack.push(i); 
      queue.add(i); 
     } 

     System.out.println("\nSTACK: " + stack + "\nQUEUE: " + queue); 
     System.out.println("\nAFTER POP AND POLL\n "); 
     System.out.println("STACK: " + stack.pop() + "\nQUEUE: " + queue.poll()); 
    } 
} 

出力は、次のとおりです。

STACK: [5, 2, 3, 1, 4, 6] 
    QUEUE: [1, 2, 3, 5, 4, 6] 

    AFTER POP AND POLL 

    STACK: 6 
    QUEUE: 1 

    STACK: [0, 1, 2, 3, 4, 5, 6] 
    QUEUE: [0, 1, 2, 3, 4, 5, 6] 

    AFTER POP AND POLL 

    STACK: 6 
    QUEUE: 0 
+1

これは、x [i]ではなく、リストに 'i'を入れるためです。 '。 –

+0

ああ、インデックスを持つ配列を反復処理する場合は、 '<='の代わりに 'i

+0

ありがとうございます。 foreachループを使用すると、同じ値が出力されます。 –

答えて

0
  1. あなたはあなたの例では優先度つきキューを使用。つまり、PriorityQueueに追加された値は自然順序(またはComparatorで指定された順序で保存されますが、この例では使用しませんでした)。値をキューに追加してFirstInFirstOutの方法で使用するには、LinkedListとそのメソッドを使用してキューとして使用することをお勧めします。

  2. "for"ループを正しく書き込んでいませんでした。あなたは使用する必要があります。これは、あなたがX配列の「i」のインデックスに格納されている値を追加する意味

    for (int i = 0; i < x.length; i++) { 
        stack.push(x[i]); 
        queue.add(x[i]); 
    

    }

。あなたのループでは、値iを追加した後、最初に0で初期化してから1ずつ増やします。最後のループでは、ArrayIndexOutOfBoundsExceptionを得ることができます。 x配列に格納されている値の最後のインデックスは[5]です。たとえば、array:int[] arr = { 64 }、arr.length = 1`に値を1つだけ格納する場合、値はインデックス0に格納されます。

+0

多くの多くのありがとう。私は理解できますが、理由を理解できません QUEUE:[1,2,3,5,4,6] 私のデータはx = {5,2,3,1,4,6}でしたか? –

+0

@MehediHasan実際には[JavaDoc](https://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html)を読んでください。 「優先順位キューの要素は、その自然順序付けに従って、またはキュー構築時に提供されたコンパレータによって順序付けされます。 PriorityQueueの代わりに別のキュー実装を使用すると、要素の順序が変更されません。例はLinkedListとArrayDequeです。 –

関連する問題