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

M. *_*can 2 java collections arraydeque

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

Stack方法:push/ poll/peek

Queue方法:push/ poll/peek

我在下面的代码块中所做的事情是,我试图理解ArrayDeque在同一个对象中同时使用 offer、push 和 add 方法时的行为。我编写的代码及其输出如下。ArrayDequeafter调用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());
Run Code Online (Sandbox Code Playgroud)

输出是:

ArrayDeque: [1, 2, 4, 3, 6, 5]
Run Code Online (Sandbox Code Playgroud)

Nic*_*tto 8

这是它一步一步的作用

// 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]
Run Code Online (Sandbox Code Playgroud)

请注意,一个主要目的Deque不同于Queue或一个Stack是有能力访问/元素添加在/到两个端部(头部和尾部)。