为什么addLast()无法正常工作

时间:2017-02-19 09:34:45

标签: java collections deque

我创建了一个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

有人请解释一下吗?

5 个答案:

答案 0 :(得分:5)

addLast并没有以某种方式维持&#34;这应该是最后一个&#34;永远 - 它只是增加了当前出队的结束。它相当于addas 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;
}

因此,addLastadd的功能相同:它在当前 deque的末尾添加,这意味着一旦添加了其他元素,添加了addLast不再是最后一个。

答案 2 :(得分:2)

  

有人请解释一下吗?

当队列中只有2个元素时,您调用了addLast。因此,传递给addLast的元素被添加到位置3。

如果您希望将12添加到Dequeue的末尾,请在addLast

添加24后致电Dequeue

答案 3 :(得分:1)

这是因为正如JAVA Doc所述,addLastadd是等效的: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

希望解释