2017-10-30 2 views
0

Wenn ich eins nach dem anderen Daten im Stapel schiebe und Daten in der Warteschlange hinzufüge, dann wird es ohne Sortierung gespeichert, aber wenn ich Schleife benutze und dieselben Daten im Stapel schiebe und die Warteschlange hinzufüge, dann werden Daten als sortiert gespeichert. Eine andere Sache ist, wenn ich Daten im Stapel einzeln push bin, ist es Speicherdaten eins nach dem anderen, aber für die Warteschlange ist es speichern Daten nach dem Zufallsprinzip. Ich kann nicht verstehen, wie man Daten in Stack und Queue speichert. Hier ist der Code:Wie werden Daten in Stack und Queue in Java gespeichert?

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

Ausgabe lautet:

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

Das liegt daran, dass Sie 'i' in die Listen setzen, nicht' x [i] '. –

+0

Oh, und wenn Sie über ein Array mit Indizes iterieren, verwenden Sie 'i

+0

Danke. Mit der foreach-Schleife wird der gleiche Wert gedruckt. –

Antwort

0
  1. Sie verwendet eine Priorityqueue in Ihrem Beispiel. Dies bedeutet, dass Werte, die zur PriorityQueue hinzugefügt wurden, in ihrer natürlichen Reihenfolge gespeichert werden (oder in der Reihenfolge, die vom Comparator angegeben wurde - aber Sie haben sie in diesem Beispiel nicht verwendet). Um Werte zu einer Warteschlange hinzuzufügen und sie auf der FirstInFirstOut-Methode zu verwenden, empfehle ich, LinkedList und seine Methoden zu verwenden, um sie als Warteschlange zu verwenden.

  2. Sie haben Ihre "for" Schleife nicht korrekt geschrieben. Sie sollten verwenden:

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

    }

Dies bedeutet, dass Sie den Wert hinzufügen, die auf dem "i" Index in dem x-Array gespeichert wird. In Ihrer Schleife haben Sie einfach den Wert von i hinzugefügt und zuerst mit 0 initialisiert und dann um 1 inkrementiert. Sie sollten auch wissen, dass Sie in der letzten Schleife ArrayIndexOutOfBoundsException erhalten könnten, weil in Ihrem Beispiel die Länge von x Array 6 ist Der letzte in x Array gespeicherte Wert ist [5]. Zum Beispiel, wenn Sie nur einen Wert im Array speichern: int[] arr = { 64 }, arr.length = 1`, aber der Wert wird bei Index 0 gespeichert.

+0

Vielen vielen Dank. Ich kann verstehen, aber ich kann nicht verstehen, warum QUEUE: [1, 2, 3, 5, 4, 6] wo meine Daten x = {5, 2, 3, 1, 4, 6} war? –

+0

@MehediHasan Sie sollten [JavaDoc] (https://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html) bereits lesen. Es besagt, dass "Elemente der Prioritätswarteschlange nach ihrer natürlichen Reihenfolge geordnet sind, oder durch einen Komparator, der zum Zeitpunkt der Warteschlangenerstellung bereitgestellt wird". Verwenden Sie anstelle von PriorityQueue eine andere Warteschlangenimplementierung, und Ihre Elemente werden nicht neu angeordnet. Beispiele sind LinkedList und ArrayDeque. –

Verwandte Themen