2017-02-19 3 views
1

Arbeit habe ich eine DEQUEUE alsWarum addlast() nicht richtig

Deque<Integer> deque = new ArrayDeque<Integer>(8); 

// use add() method to add elements in the deque 
deque.add(20); 
deque.add(30); 
deque.addLast(12); 
deque.add(18);   
deque.addFirst(22); 
deque.add(24); 

// let us print all the elements available in deque 
for (Integer number : deque) { 
    System.out.println("Number = " + number); 
} 

Die erwartete Ausgabe ist follws:

Number = 22 
Number = 20 
Number = 30 
Number = 18 
Number = 24 
Number = 12 

Aber die tatsächliche Ausgabe lautet:

Number = 22 
Number = 20 
Number = 30 
Number = 12 
Number = 18 
Number = 24 

jemand bitte Erklär das?

+1

Was denken Sie 'addlast()' tut erklärt? Warum denkst du das? – shmosel

+1

Könnte ** Sie ** erklären, warum Sie diese Ausgabe erwartet haben? –

Antwort

2

Bitte erläutern Sie dies bitte?

Sie haben addLast aufgerufen, wenn nur 2 Elemente in der Warteschlange waren. Das Element zu addLast geben wurde daher an der Stelle hinzugefügt 3.

Wenn Sie 12 wollen Ende des Dequeue hinzugefügt werden, addLast rufen, nachdem Sie 24 zum Dequeue

5

addLast hinzufügen halten nicht irgendwie ein Die Vorstellung von "das sollte für immer sein" - es fügt nur noch das Ende der aktuellen Dequeue hinzu. Es entspricht add, as documented.

Also, wenn wir auf die Werte bei jedem Schritt aussehen, haben wir:

deque.add(20);  // Contents: 20 
deque.add(30);  // Contents: 20, 30 
deque.addLast(12); // Contents: 20, 30, 12 
deque.add(18);  // Contents: 20, 30, 12, 18 
deque.addFirst(22); // Contents: 22, 20, 30, 12, 18 
deque.add(24);  // Contents: 22, 20, 30, 12, 18, 24 

..., die genau mit dem Ausgang entspricht Sie.

3

Die addLast Methode ergänzt die letzte Position in Bezug auf den aktuellen deque, nicht absolut:

deque.add(20);  // [20] 
deque.add(30);  // [20, 30] 
deque.addLast(12); // [20, 30, 12] <- 12 is last 
deque.add(18);  // [20, 30, 12, 18] 
deque.addFirst(22); // [22, 20, 30, 12, 18] 
deque.add(24);  // [22, 20, 30, 12, 18, 24] 

12 war das letzte Element, wenn Sie nur [20, 30] hatte, aber dann werden Sie andere Elemente hinzufügen, so dass es wird nicht mehr der letzte sein. Wenn Sie möchten, dass dieser Wert der letzte ist, müssen Sie nach allen anderen Anrufen addLast anrufen.

UPDATE

Wenn Sie einen Blick auf den Quellcode ArrayDeque:

public boolean add(E e) { 
    addLast(e); 
    return true; 
} 

Also, die addLast tut das Gleiche wie add: Es fügt am Ende des Strom Deque, was bedeutet, dass, sobald Sie andere Elemente hinzufügen, die mit addLast hinzugefügt wird nicht mehr die letzte sein.

+0

* Also, das AddLast tut das gleiche wie add *. Sollte es nicht umgekehrt sein? – CKing

+0

@CKing Von einem Code Sicht ja, es ist der andere Weg. Aus logischer Sicht ist es genau das gleiche Konzept: Die beiden Methoden machen das Gleiche. – BackSlash

+0

@BackSlash Wenn add() & addLast() äquivalent sind, was ist dann von diesen beiden Methoden vorgeschlagen? –

1

Dies liegt daran, wie JAVA Doc Staaten, addLast und add gleichwertig sind: addLast(E e). Denken Sie also daran, dass Sie einfach 12 zur deque hinzufügen. Das Hinzufügen einer anderen ganzen Zahl zur Deque wird nicht sicherstellen, dass 12 immer das letzte Element sein soll.

1

Ich versuche, die Reihenfolge der Ereignisse zu erklären,

1. 1st addition : 20  
2. 2nd addition: 20, 30 
3. 3rd addition: 20, 30, 12 -- 12 added to the last 
4. 3rd addition: 20, 30, 12 
5. 4th addition: 20, 30, 12, 18 
6. 5th addition: 22, 20, 30, 12, 18 -- 22 added to the first 
7. 6th addition: 22, 20, 30, 12, 18, 24 

Hoffnung, die

Verwandte Themen