一.概述
Deque接口是Queue接口的子接口,它代表一个双端队列,该队列允许从两端来操作队列中的元素。Deque不仅可以当成双端队列使用,而且可以当成栈来使用。
ArrayDeque集合是Deque接口的实现类,它是一个基于数组的双端队列,创建Deque时同样可以指定一个numElements参数,该参数用于指定Object[]数组的长度;如果不指定该参数,Deque底层数组长度为16。
二.常用方法
1.添加元素
- addFirst(E e)在数组前面添加元素
addLast(E e)在数组后面添加元素
offerFirst(E e) 在数组前面添加元素,并返回是否添加成功
offerLast(E e) 在数组后天添加元素,并返回是否添加成功
2.删除元素
- removeFirst()删除第一个元素,并返回删除元素的值,如果元素为null,将抛出异常
pollFirst()删除第一个元素,并返回删除元素的值,如果元素为null,将返回null
removeLast()删除最后一个元素,并返回删除元素的值,如果为null,将抛出异常
pollLast()删除最后一个元素,并返回删除元素的值,如果为null,将返回null
removeFirstOccurrence(Object o) 删除第一次出现的指定元素
removeLastOccurrence(Object o) 删除最后一次出现的指定元素
3.获取元素
- getFirst() 获取第一个元素,如果没有将抛出异常
getLast() 获取最后一个元素,如果没有将抛出异常
4.队列操作
- add(E e) 在队列尾部添加一个元素
offer(E e) 在队列尾部添加一个元素,并返回是否成功
remove() 删除队列中第一个元素,并返回该元素的值,如果元素为null,将抛出异常(其实底层调用的是removeFirst())
poll() 删除队列中第一个元素,并返回该元素的值,如果元素为null,将返回null(其实调用的是pollFirst())
pollFirst() 检索并删除此deque的第一个元素,如果此deque为空,则返回 null 。
pollLast() 检索并删除此deque的最后一个元素,如果此deque为空,则返回 null 。
element() 获取第一个元素,如果没有将抛出异常
peek() 获取第一个元素,如果返回null
peekFirst()检索但不删除此deque的第一个元素,如果此deque为空,则返回 null
peekLast()检索但不删除此deque的最后一个元素,如果此deque为空,则返回 null
5.栈操作 - push(E e) 栈顶添加一个元素
pop(E e) 移除栈顶元素,如果栈顶没有元素将抛出异常
6.其他
- size() 获取队列中元素个数
isEmpty() 判断队列是否为空
iterator() 迭代器,从前向后迭代
descendingIterator() 迭代器,从后向前迭代
contain(Object o) 判断队列中是否存在该元素
toArray() 转成数组
clear() 清空队列
clone() 克隆(复制)一个新的队列
三.实例
ArrayDeque集合既可当队列使用,也可当栈使用,见实例如下:
1. ArrayDeque集合当栈来使用
import java.util.*;
public class ArrayDequeStack
{
public static void main(String[] args)
{
ArrayDeque stack = new ArrayDeque();
// 依次将三个元素push入"栈"
stack.push("循循渐进Linux");
stack.push("小学语文");
stack.push("时间简史");
// 输出:[时间简史, 小学语文, 循循渐进Linux]
System.out.println(stack);
// 访问第一个元素,但并不将其pop出"栈",输出:时间简史
System.out.println(stack.peek());
// 依然输出:[时间简史, 小学语文, 循循渐进Linux]
System.out.println(stack);
// pop出第一个元素,输出:时间简史
System.out.println(stack.pop());
// 输出:[小学语文, 循循渐进Linux]
System.out.println(stack);
}
}
2. ArrayDeque集合当队列来使用
import java.util.*;
public class ArrayDequeQueue
{
public static void main(String[] args)
{
ArrayDeque queue = new ArrayDeque();
// 依次将三个元素加入队列
queue.offer("光头强");
queue.offer("熊大");
queue.offer("熊二");
// 输出:[光头强, 熊大, 熊二]
System.out.println(queue);
// 访问队列头部的元素,但并不将其poll出队列"栈",输出:光头强
System.out.println(queue.peek());
// 依然输出:[光头强, 熊大, 熊二]
System.out.println(queue);
// poll出第一个元素,输出:光头强
System.out.println(queue.poll());
// 输出:[熊大, 熊二]
System.out.println(queue);
}
}
参考:
https://www.iteye.com/blog/cakin24-2324030
https://www.cnblogs.com/chenglc/p/10722304.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/89336.html