首先,这两个类都是继承自collection接口。
Deque是Queue的子接口。
一般来说,Deque用于双端队列,在头尾都可插入和删除。
Queue就是普通的队列,满足FIFO。
Queue常用的一个子类是PriorityQueue。我反正是没怎么见过。这东西的特性是自带扩容机制,底层实现用的是数组。
Deque常用的子类有两个:ArrayDeque和LinkedList。
这两玩意都是既可以当作栈用,也可以当作队列用。但是效率有区别。
ArrayDeque用作队列时效率高。
LinkedLIst用作栈时效率高。
为什么呢?
ArrayDeque是无初始容量的双端队列(没闹明白)
LinkedList有尾节点,不需要判空。(也没闹明白)
private static void usingAsQueue() {
Deque<Integer> queue=new ArrayDeque<>();
System.out.println("队列为空:"+queue.isEmpty()); //判断队列是否为空
queue.addLast(12); //添加元素
System.out.println(queue.peekFirst()); //获取队列首部元素
System.out.println(queue.pollFirst()); //获取并移除栈顶元素
}
private static void usingAsStack() {
//作为栈使用
Deque<Integer> stack=new LinkedList<>();
System.out.println("栈为空:"+stack.isEmpty()); //判断栈是否为空
stack.addFirst(12);//添加元素
System.out.println(stack.peekFirst()); //获取栈顶元素
System.out.println(stack.pollFirst()); //获取并移除栈顶元素
}