在 ArrayDeque 中同时使用 push()、offer() 和 add() 方法会发生什么?

What happens when using push(), offer() and add() methods in ArrayDeque at the same time?

ArrayDeque 有栈和队列的方法。最常用的堆栈和队列方法如下:

Stack方法:push/poll/peek

Queue方法:push/poll/peek

我在下面的代码块中所做的事情是,当在同一对象中同时使用 offer、push 和 add 方法时,我试图理解 ArrayDeque 的行为。我编写的代码及其输出如下所示。 ArrayDeque 在调用 push() 方法之后的行为是什么,它假定自己是一个堆栈,然后调用 offer() 方法,它被声明为队列方法。

Deque<Integer> arrayDeque = new ArrayDeque<>(); 

arrayDeque.add(3);
arrayDeque.push(4);
arrayDeque.offer(6);
arrayDeque.addFirst(2);
arrayDeque.addLast(5);
arrayDeque.addFirst(1);
System.out.println("ArrayDeque: " + arrayDeque.toString());

输出为:

ArrayDeque: [1, 2, 4, 3, 6, 5]

1.offer-此方法将指定的元素插入此双端队列的末尾。 2.add-此方法将指定的元素插入此双端队列的末尾。 3.push-此方法将一个元素压入此双端队列所表示的堆栈中。 4.addFirst-此方法将指定的元素插入此双端队列的前面。 5.addLast-此方法将指定元素插入此双端队列的末尾。

这是它一步一步做的事情

// Add 3 at the tail of this deque
arrayDeque.add(3); -> [3]
// Add 4 at the head of this deque
arrayDeque.push(4); -> [4, 3]
// Add 6 at the tail of this deque
arrayDeque.offer(6); -> [4, 3, 6]
// Add 2 at the head of this deque
arrayDeque.addFirst(2); -> [2, 4, 3, 6]
// Add 5 at the tail of this deque
arrayDeque.addLast(5); -> [2, 4, 3, 6, 5]
// Add 1 at the head of this deque
arrayDeque.addFirst(1); -> [1, 2, 4, 3, 6, 5]

请记住,DequeQueueStack 不同的主要目的是能够 access/add 元素 at/to 结束(头部和尾部)。

有什么不懂的?

Could you explain the behaviour of the ArrayDeque after calling push() method, which it assumes itself as a stack, and then calling the offer() method, which is stated as queue methods in the JavaDoc

看看 Javadoc:https://docs.oracle.com/javase/7/docs/api/java/util/ArrayDeque.html

push方法在开头插入,offer在结尾插入。

Nicolas Filotto 的回答是正确的。 我发现源代码文件中的 "tail" 解释是错误的。它说添加=推送。但是在函数实现上,add=addLast,push=addFirst。