Java双端队列
*Java双端队列的知识
Deque 接口是 double ended queue 的缩写,即双端队列,支持在队列的两端插入和删除元素,继承 Queue接口。public interface Deque extends Queue
Deque 的 12 种方法总结如下:
- 插入:
- 如果操作失败则抛出异常
void addFirst(Object e)void addLast(Object e)
- 如果操作失败则返回一个特殊值(
null或false)boolean offerFirst(Object e)boolean offerLast(Object e);
- 如果操作失败则抛出异常
- 删除:
- 如果操作失败则抛出异常
Object removeFirst()Object removeLast()
- 如果操作失败则返回一个特殊值(
null或false)Object pollFirst()Object pollLast()
- 如果操作失败则抛出异常
- 获取:
- 如果操作失败则抛出异常
Object getFirst()Object getLast()
- 如果操作失败则返回一个特殊值(
null或false)Object peekFirst()Object peekLast()
- 如果操作失败则抛出异常
Deque 与 List 不同,该接口不支持下标访问元素。Deque 的实现并不严格要求禁止插入元素 null,但强烈鼓励不插入 null。任何 Deque 的实现都强烈鼓励不要插入 null,因为 null 是多种方法作为一种特殊返回值来表示 Deque 为空。
ArrayDeque 和 LinkedList 类是 Deque 接口的两个实现类:
ArrayDeque类由数组支持。适合当作堆栈使用。LinkedList类由链表支持。适合当作FIFO队列使用。
*代码
import java.util.Deque;
import java.util.LinkedList;
public class DequeTest {
public static void main(String[] args) {
Deque<String> deque = new LinkedList<String>();
deque.add("d");
deque.add("e");
deque.add("f");
//从队首取出元素,不会删除
System.out.println("队首取出元素:"+deque.peek());
System.out.println("队列为:"+deque);
//从队首加入元素(队列有容量限制时用,无则用addFirst)
deque.offerFirst("c");
System.out.println("队首加入元素后为:"+deque);
//从队尾加入元素(队列有容量限制时用,无则用addLast)
deque.offerLast("g");
System.out.println("队尾加入元素后为:"+deque);
//队尾加入元素
deque.offer("h");
System.out.println("队尾加入元素后为:"+deque);
//获取并移除队列第一个元素,pollFirst()也是,区别在于队列为空时,removeFirst会抛出NoSuchElementException异常,后者返回null
deque.removeFirst();
System.out.println("获取并移除队列第一个元素后为:"+deque);
//获取并移除队列第一个元素,此方法与pollLast 唯一区别在于队列为空时,removeLast会抛出NoSuchElementException异常,后者返回null
deque.removeLast();
System.out.println("获取并移除队列最后一个元素后为:"+deque);
//获取队列第一个元素.此方法与 peekFirst 唯一的不同在于:如果此双端队列为空,它将抛出NoSuchElementException,后者返回null
System.out.println("获取队列第一个元素为:"+deque.getFirst());
System.out.println("获取队列第一个元素后为:"+deque);
//获取队列最后一个元素.此方法与 peekLast 唯一的不同在于:如果此双端队列为空,它将抛出NoSuchElementException,后者返回null
System.out.println("获取队列最后一个元素为:"+deque.getLast());
System.out.println("获取队列第一个元素后为:"+deque);
//循环获取元素并在队列移除元素
while(deque.size()>0){
System.out.println("获取元素为:"+ deque.pop()+" 并删除");
}
System.out.println("队列为:"+deque);
}
}

浙公网安备 33010602011771号