【Java集合框架】11 ——ArrayDeque 类

一、ArrayDeque 类介绍

我们知道在Java中创建接口对象是不可能的。因此,对于实例化,我们需要一个实现Deque接口的类,这个类就是ArrayDeque。它会随着每次使用而增长和收缩。它还继承了AbstractCollection类。

关于ArrayDeque类的特性是:

  • 与Queue不同的是,我们可以在两边添加或删除元素。
  • Null元素不允许出现在ArrayDeque中
  • 它们不是线程安全的,这意味着在没有外部同步的情况下,ArrayDeque不支持多线程并发访问。
  • ArrayDeque没有容量限制。
  • ArrayDeque比LinkedList和Stack更快。

ArrayDeque层次结构
在这里插入图片描述

ArrayDeque同时实现了Queue和Deque。它可以从两边动态地调整大小。层次结构中ArrayDeque实现的所有接口为Serializable, Cloneable, Iterable, Collection, Deque, Queue

类描述:

public class ArrayDeque<E> extends AbstractCollection<E>
                           implements Deque<E>, Cloneable, Serializable

构造方法:

二、ArrayDeque 的操作

2.1 添加操作

为了向ArrayDeque中添加元素,我们可以使用add()、addFirst()、addLast()、offer()、offerFirst()、offerLast()方法。

  • add()
  • addFirst()
  • addLast()
  • offer()
  • offerFirst()
  • offerLast()

实例:

        Deque<String> dq = new ArrayDeque<String>();

        // 添加元素
        dq.add("广州");
        dq.addFirst("深圳");
        dq.addLast("东莞");
        System.out.println("添加后:ArrayDeque : " + dq);

        // 添加元素——从后面添加
        dq.offer("上海");
        dq.offerFirst("北京");
        dq.offerLast("杭州");
        

        // 输出
        System.out.println("ArrayDeque : " + dq);

输出

添加后:ArrayDeque : [深圳, 广州, 东莞]
ArrayDeque : [北京, 深圳, 广州, 东莞, 上海, 杭州]

2.2 访问操作

添加元素之后,如果我们希望访问元素,可以使用内置方法,如getFirst()、getLast()等。

  • getFirst()
  • getLast()
  • peek()
  • peekFirst()
  • peekLast()

实例:

        Deque<String> de_que = new ArrayDeque<String>();

        // 添加元素
        de_que.add("深圳");
        de_que.add("广州");
        de_que.add("佛山");
        de_que.add("东莞");
        de_que.add("珠海");

        // 输出远古三
        System.out.println("添加后ArrayDeque: " + de_que);

        // 输出头部元素
        System.out.println("头部元素: "
                + de_que.getFirst());

        // 输出尾部元素
        System.out.println("尾部元素: "
                + de_que.getLast());

输出

添加后ArrayDeque: [深圳, 广州, 佛山, 东莞, 珠海]
头部元素: 深圳
尾部元素: 珠海

2.3 删除操作

要从deque容器中删除一个元素,可以使用多种方法,因为我们也可以从两端进行删除,所以deque接口为我们提供了removeFirst()和removeLast()方法。除此之外,该接口还为我们提供了poll()、pop()、pollFirst()、pollLast()方法,其中pop()用于删除和返回deque容器的头部,但是,使用poll()是因为它提供了与pop()相同的功能,并且当deque为空时不会返回异常。这些操作如下所示:

  • remove()
  • removeFirst()
  • removeLast()
  • poll()
  • pollFirst()
  • pollLast()
  • pop()
        Deque<String> de_que = new ArrayDeque<String>();

        // 添加元素
        de_que.add("深圳");
        de_que.add("广州");
        de_que.add("佛山");
        de_que.add("东莞");
        de_que.add("珠海");

        // 输出
        System.out.println("添加后ArrayDeque: " + de_que);

        // 删除元素,出栈
        System.out.println(de_que.pop());

        // 删除元素,出列
        System.out.println(de_que.poll());

        // 删除:首元素,出列
        System.out.println(de_que.pollFirst());

        // 删除:尾元素,出列
        System.out.println(de_que.pollLast());

输出:

添加后ArrayDeque: [深圳, 广州, 佛山, 东莞, 珠海]
深圳
广州
佛山
珠海

2.4 迭代操作

由于deque容器可以从两个方向进行迭代,因此deque接口的iterator方法为我们提供了两种迭代方法。一个从前面,另一个从后面。这些操作列示如下:

  • remove()
  • iterator()
  • descendingIterator()

实例:

        Deque<String> de_que = new ArrayDeque<String>();

        // 添加元素
        de_que.add("深圳");
        de_que.add("广州");
        de_que.add("佛山");
        de_que.add("东莞");
        de_que.add("珠海");

        // 输出
        System.out.println("添加后ArrayDeque: " + de_que);

        // 迭代器:Iterator
        for (Iterator itr = de_que.iterator(); itr.hasNext();) {

            // 输出
            System.out.print(itr.next() + " ");
        }

        // 下一行
        System.out.println();

        // 迭代器:反转元素,逆序输出
        for (Iterator itr = de_que.descendingIterator();
             itr.hasNext();) {

            System.out.print(itr.next() + " ");
        }

输出:

添加后ArrayDeque: [深圳, 广州, 佛山, 东莞, 珠海]
深圳 广州 佛山 东莞 珠海 
珠海 东莞 佛山 广州 深圳

三、ArrayDeque 的API

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值