ArrayDeque 底层是双端队列的数据结构。java中队列和栈的实现一般都是使用集合ArrayDeque。下面记录一下ArrayDeque中pop() 和 poll()方法的使用。
pop() 一般指弹栈 poll()指出队
但是在双端队列集合中pop()方法不是弹栈的操作。
// Java program to demonstrate the example
// of T pop() method of ArrayDeque
import java.util.*;
public class PopOfArrayDeque {
public static void main(String[] args) {
// Creating an ArrayDeque with initial capacity of
// storing elements
Deque < String > d_queue = new ArrayDeque < String > (10);
//By using add() method to add elements
//in ArrayDeque
d_queue.add("C");
d_queue.add("C++");
d_queue.add("Java");
d_queue.add("Php");
d_queue.add("DotNet");
// Display Deque Elements
System.out.println("d_queue before pop(): ");
System.out.println("ArrayDeque Elements = " + d_queue);
System.out.println();
// By using pop() method to remove and return the
// element at the first position in ArrayDeque
String ele = d_queue.pop();
// Display Returned Elements
System.out.println("d_queue.pop() : " + ele);
System.out.println();
// Display Deque Elements
System.out.println("d_queue after pop(): ");
System.out.println("ArrayDeque Elements = " + d_queue);
}
}
下面测试一下ArrayDeque的poll方法 出队
import java.util.*;
public class PollOfArrayDeque {
public static void main(String[] args) {
// Creating an ArrayDeque with initial capacity of
// storing elements
Deque< String > d_queue = new ArrayDeque< String >(10);
//By using add() method to add elements
//in ArrayDeque
d_queue.add("C");
d_queue.add("C++");
d_queue.add("Java");
d_queue.add("Php");
d_queue.add("DotNet");
// Display Deque Elements
System.out.println("d_queue before poll(): ");
System.out.println("ArrayDeque Elements = " + d_queue);
System.out.println();
// By using poll() method to remove and return the
// element at the first position in ArrayDeque
String ele = d_queue.poll();
// Display Returned Elements
System.out.println("d_queue.poll() : " + ele);
System.out.println();
// Display Deque Elements
System.out.println("d_queue after poll(): ");
System.out.println("ArrayDeque Elements = " + d_queue);
}
}
ArrayDeque的pop 和poll 方法的效果是一样的都是先入队的出队。
我们看一下源码:
pop() 方法等价于removeFirst(), 底层调用的是removeFirst()方法。
poll()方法等价于pollFirst() 方法,底层调用的是pollFirst()。
两个方法的区别在于如果deque是空的(Empty) poll方法会返回null, pop方法会抛出异常NoSuchElementException()。这也是removeFirst(), pollFirst()方法的区别。
实际上,removeFirst底层调用的也是pollFirst方法,只是增加了一个null的判断。
附上源码:
有兴趣的可以去看看源码的pollFirst实现。
结论:
- pop和poll都是返回队列的队首元素,按照先入队的先出队的顺序;
- ArrayDeque集合在作为栈时,默认队首也是栈首。
参考:
https://blog.csdn.net/cumubi7453/article/details/107795019