我创建了一个DeQueue作为follws
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
有人请解释一下吗?
答案 0 :(得分:5)
addLast
并没有以某种方式维持&#34;这应该是最后一个&#34;永远 - 它只是增加了当前出队的结束。它相当于add
,as documented。
因此,如果我们查看每一步的值,我们就有:
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
...这与你得到的输出完全一致。
答案 1 :(得分:3)
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]
12是你只有[20, 30]
的最后一个元素,但是你要添加其他元素,所以它不再是最后一个元素了。
因此,如果您希望该值为最后一个,则需要在所有其他调用之后调用addLast
。
<强>更新强>
如果你看一下ArrayDeque
的源代码:
public boolean add(E e) {
addLast(e);
return true;
}
因此,addLast
与add
的功能相同:它在当前 deque的末尾添加,这意味着一旦添加了其他元素,添加了addLast
不再是最后一个。
答案 2 :(得分:2)
有人请解释一下吗?
当队列中只有2个元素时,您调用了addLast
。因此,传递给addLast
的元素被添加到位置3。
如果您希望将12
添加到Dequeue
的末尾,请在addLast
24
后致电Dequeue
答案 3 :(得分:1)
这是因为正如JAVA Doc所述,addLast
和add
是等效的:addLast(E e)。因此,请考虑您只是向deque
添加12。在deque中添加另一个整数不会确保12应该始终是最后一个元素。
答案 4 :(得分:1)
我试图解释事件的顺序,
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
希望解释