queue源码java_看看AbstractQueue源码Java9

f91510657ff0422bf1f6a1340015235b.png

现在我们看看这个类AbstractQueue,此类提供某些Queue操作的核心实现。方法add,remove和element分别基于offer,poll和peek,但抛出异常而不是通过false或null返回指示失败。

扩展此类的Queue实现必须最低限度地定义一个方法Queue.offer(E),该方法不允许插入null元素,以及Queue.peek(),Queue.poll(),Collection.size()和Collection.iterator()方法。通常,还会覆盖其他方法。如果无法满足这些要求,请考虑继承AbstractCollection。

这里只有一个protected的构造方法,其实里面是什么都没有做的。

f6878632d20b1a1d0d2dceaa4fa6e383.png

然后,我们看看具体AbstractQueue有哪些方法,这里主要是实现了接口Queue的方法。

0b1e76c8e1c461084d80316eb272e5c4.png

add(E e)方法:如果可以在不违反容量限制的情况下立即执行此操作,则将指定的元素插入此队列,成功时返回true,如果当前没有可用空间则抛出IllegalStateException。加入成功,那么就会放回true。这里用的是offer方法的实现

2db8bdfae827f1acd3e66fd6259c1759.png

remove()检索并删除此队列的头部。如果元素不存在就抛出NoSuchElementException异常。这里用的是poll方法的实现。

8b94b4e09ded266c55b624ba7cf22eaf.png

element()检索返回但不删除此队列的头部。用的是peek()方法。

75d5797faa66c712cf54b2631a6170f5.png

clear()方法在while里面调用poll()直到返回null。

942b4c88775439dc9200b1cac8596722.png

addAll(Collection extends E> c)方法需要Collection参数是非空的,还有不能包含自己,遍历调用add方法,如果修改了,就是modified=true。

984d27b5a0228ab248bce9708e4bf7f8.png

上面就是AbstractQueue中的方法。

然后,我看看队列的定义吧。

队列,又称为伫列(queue),是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。

队列的操作方式和堆栈类似,唯一的区别在于队列只允许新数据在后端进行添加。

有什么讨论的内容,可以加我公众号:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值