[英]Why addLast() not working properly
我創建了一個如下的DeQueue
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);
}
預期的輸出是:
Number = 22
Number = 20
Number = 30
Number = 18
Number = 24
Number = 12
但是實際輸出是:
Number = 22
Number = 20
Number = 30
Number = 12
Number = 18
Number = 24
有人請解釋一下嗎?
addLast
不會以某種方式永遠保持“這應該是最后一個”的概念-它只會添加到當前出隊的末尾。 如記錄所示 ,它等同於add
。
因此,如果我們看每一步的值,我們就會:
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
...與您得到的輸出完全對應。
addLast
方法添加到相對於當前雙端隊列的最后位置,不是絕對的:
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]
當您只有[20, 30]
但是要添加其他元素時,12是最后一個元素,因此它將不再是最后一個。
因此,如果您希望該值成為最后一個值,則需要在所有其他調用之后調用addLast
。
更新
如果您看一下ArrayDeque
的源代碼:
public boolean add(E e) {
addLast(e);
return true;
}
因此, addLast
作用與add
相同:它在當前雙端隊列的末尾添加,這意味着一旦添加了其他元素,添加了addLast
元素將不再是最后一個元素。
有人請解釋一下嗎?
當隊列中只有2個元素時,您調用了addLast
。 因此,傳遞給addLast
的元素被添加到位置3。
如果你想12
被添加到年底Dequeue
,調用addLast
添加后24
到Dequeue
這是因為如JAVA Doc所述, addLast
和add
是等效的: addLast(E e) 。 因此,請考慮將deque
簡單地添加12。 在雙端隊列中添加另一個整數將不會確保總是將12作為最后一個元素。
我試圖解釋事件的順序,
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
希望能解釋
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.