簡體   English   中英

為什么addLast()無法正常工作

[英]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添加后24Dequeue

這是因為如JAVA Doc所述, addLastadd是等效的: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM