容器(四) ArrayDeque源码解析

容器(四) ArrayDeque源码解析

概述:在使用到队列或者数组的场景下,LinkedList可以满足条件,但是效率一般,所以ArrayDeque得以诞生。
定义:ArrayDeque底层是Object[]存储数据,通过双向链表形成顺序关系,对头部和尾部都有相同的处理方式。

  • 方法
First Element - HeadLast Element - Tail
Throws exceptionSpecial valueThrows exceptionSpecial value
InsertaddFirst(e)offerFirst(e)addLast(e)offerLast(e)
RemoveremoveFirst()pollFirst()removeLast()pollLast()
ExaminegetFirst()peekFirst()getLast()peekLast()
  • 作为Queue的场景
    队列特点是FIFO先进先出,所以新增时插入队列尾部,取出时/删除 时从队列头部取出
    方法场景:
    新增:addLast/offerLast
    删除:removeFirst/pollFirst
    查询:getFirst/peekFirst

  • 作为Stack场景,特点是先进后出
    方法场景:
    新增:addFirst/offerFirst
    删除:removeFirst/pollFirst
    查询:getFirst/peekFirst

使用注意点:
add中的扩容
会对现有容量扩容一倍,复制分两次进行,第一次复制head右边的元素,第二次复制head左边的元素

addLast(E e)的作用是在Deque的尾端插入元素,也就是在tail的位置插入元素,由于tail总是指向下一个可以插入的空位,因此只需要elements[tail] = e;即可。插入完成后再检查空间,如果空间已经用光,则调用doubleCapacity()进行扩容。

pollFirst()的作用是删除并返回Deque首端元素,也即是head位置处的元素。如果容器不空,只需要直接返回elements[head]即可,当然还需要处理下标的问题。由于ArrayDeque中不允许放入null,当elements[head] == null时,意味着容器为空。

pollLast()的作用是删除并返回Deque尾端元素,也即是tail位置前面的那个元素。

peekFirst()的作用是返回但不删除Deque首端元素,也即是head位置处的元素,直接返回elements[head]即可。

peekLast()的作用是返回但不删除Deque尾端元素,也即是tail位置前面的那个元素。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

感恩的心_Yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值