在 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]
请记住,Deque
与 Queue
或 Stack
不同的主要目的是能够 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。
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]
请记住,Deque
与 Queue
或 Stack
不同的主要目的是能够 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。