「这是我参与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 |
| 这里这个方法挺多的,我已经把具体含义都写出来了,就不再跟大家演示了。 |