数据结构
ArrayDeque类是 双端队列的线性实现类。
具有以下特征:
- ArrayDeque是采用数组方式实现的双端队列。
- ArrayDeque的出队入队是通过头尾指针循环,利用数组实现的。
- ArrayDeque容量不足时是会扩容的,每次扩容容量增加一倍。
- ArrayDeque可以直接作为栈使用。当用作栈时,性能优于Stack,当用于队列时,性能优于LinkedList。
- 无容量大小限制,容量按需增长。
- 非线程安全队列,无同步策略,不支持多线程安全访问。
- 具有fail-fast特性,不能存储null值,支持双向迭代器遍历。
方法列表
类型 | 方法 | 类型 |
---|---|---|
添加元素 | public void addFirst(E e) | 在数组前面添加元素 |
public void addLast(E e) | 在数组后面添加元素 | |
public boolean offerFirst(E e) | 在数组前面添加元素,并返回是否添加成功 | |
public boolean offerLast() | 在数组后面添加元素,并返回是否添加成功 | |
删除元素 | public E pollFirst() | 删除第一个元素,并返回删除元素的值,如果元素为null,将返回null |
public E removeFirst() | 删除第一个元素,并返回删除元素的值,如果元素为null,将抛出异常 | |
public E pollLast() | 删除最后一个元素,并返回删除元素的值,如果为null,将返回null | |
public E removeLast() | 删除最后一个元素,并返回删除元素的值,如果为null,将抛出异常 | |
public boolean removeFirstOccurrence(Object o) | 删除第一次出现的指定元素 | |
public boolean removeLastOccurrence(Object o) | 删除最后一次出现的指定元素 | |
获取元素 | public E getFirst() | 获取第一个元素,如果没有将抛出异常 |
public E getLast() | 获取最后一个元素,如果没有将抛出异常 | |
队列操作 | public boolean add(E e) | 在队列尾部添加一个元素 |
public boolean offer(E e) | 在队列尾部添加一个元素,并返回是否成功 | |
public E remove() | 删除队列中第一个元素,并返回该元素的值,如果元素为null,将抛出异常(其实底层调用的是removeFirst() | |
public E peek() | 获取第一个元素,如果返回null | |
栈操作 | public void push(E e) | 栈顶添加一个元素 |
public E pop() | 移除栈顶元素,如果栈顶没有元素将抛出异常 | |
其他 | public int size() | 获取队列中元素个数 |
public boolean isEmpty() | 判断队列是否为空 | |
public Iterator iterator() | 迭代器,从前向后迭代 | |
public Iterator descendingIterator() | 迭代器,从后向前迭代 | |
public boolean contains(Object o) | 判断队列中是否存在该元素 | |
public Object[] toArray() | 转成数组 | |
public T[] toArray(T[] a) | 转成a数组常 | |
public void clear() | 清空队列 | |
public ArrayDeque clone() | 克隆(复制) |
当成队列用时
Deque<E> queue = new ArrayDeque<>();
queue.size()
E a=queue.addLast()
E b=queue.removeFirst()
当成栈用时
Deque<E> stack = new ArrayDeque<>();
stack.size()
E a=stack.addLast()
E b=stack.removeLast()