「这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战」
这里首先说一下 Deque 是一个接口 但它实现 Queue
Queue和 Deque 共有方法 | |
---|---|
boolean add(E e); | 在队列尾部添加一个元素 成功返回true 失败抛出异常 |
boolean offer(E e); | 在队列尾部添加一个元素 成功返回true 失败返回false |
E remove(); | 取出队列的第一个元素,并从队列中移除该元素,成功返回该元素,失败返回false,如果指定元素为空,抛出NullPointerException |
E poll(); | 取出队列第一个元素,并从队列中移除该元素,成功返回该元素,失败返回null。 |
E element(); | 取出队列第一个元素,不移除,成功返回该元素,失败抛出异常 |
E peek(); | 取出队列第一个元素,不移除,成功返回该元素,失败返回null。 |
-
添加演示:
ps:因为不同队列的具体实现方式不同,有的队列 add方法里面调用的就是 offer(java.util.PriorityQueue#add )
为了效果更明显,所以选取 ArrayBlockingQueue 作为实现类,进行演示
- add 和 offer
可以看到 offer 添加失败返回false,而 add 添加失败 抛出异常。
- 移除演示
-
正常移除测试:
通过输出 queue.size 我们可以看出,element 和 peek 方法,是取出元素,但不会从队列中移除,而 poll 和 remove 是在取出元素的同时,从队列中移除该元素
-
异常移除测试:
大家可以看到,peek 和 poll 方法取不到元素会返回 null,而 element 和 remove 方法取不到元素会抛异常
-
因为Deque是双端队列,所以它可以从头部添加或取出,也可以从尾部添加或取出,所以下面是它的独有方法。
Deque的独有方法 | |
---|---|
void addFirst(E e); | 在队列头部 添加一个元素,失败抛出异常 |
void addLast(E e); | 在队列尾部 添加一个元素,失败抛出异常 |
boolean offerFirst(E e); | 在队列头部 添加一个元素,成功返回true ,失败返回false |
boolean offerLast(E e); | 在队列尾部 添加一个元素,成功返回true ,失败返回false |
E removeFirst(); | 取出队列的第一个元素,并移除该元素,成功返回该元素,失败抛出异常 |
E removeLast(); | 取出队列的最后一个元素,并移除该元素,成功返回该元素,失败抛出异常 |
E pollFirst(); | 取出队列的第一个元素,并移除该元素,成功返回该元素,失败返回null |
E pollLast(); | 取出队列的最后一个元素,并移除该元素,成功返回该元素,失败返回null |
E getFirst(); | 取出队列的第一个元素,不移除,成功返回该元素,失败抛出异常 |
E getLast(); | 取出队列的最后一个元素,不移除,成功返回该元素,失败抛出异常 |
E peekFirst(); | 取出队列的第一个元素,不移除,成功返回该元素,失败返回null |
E peekLast(); | 取出队列的最后一个元素,不移除,成功返回该元素,失败返回null |
boolean removeFirstOccurrence(Object o); | 移除双向队列中第一个出现的该元素,成功返回true,失败抛出异常 |
boolean removeLastOccurrence(Object o); | 移除双向队列中最后一个出现的该元素,成功返回true,失败抛出异常 |
void push(E e); | 在双向队列头部 添加一个元素 ,失败抛出异常 |
E pop(); | 取出队列的第一个元素,并移除该元素,队列为空时 抛出NoSuchElementException |
boolean contains(Object o); | 判断队列中是否包含指定元素,包含返回true 否则返回false |
这里这个方法挺多的,我已经把具体含义都写出来了,就不再跟大家演示了。 |