ArrayDeque类的使用

导读:本篇文章讲解 ArrayDeque类的使用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一.概述

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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!