现在我们看看这个类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的构造方法,其实里面是什么都没有做的。
然后,我们看看具体AbstractQueue有哪些方法,这里主要是实现了接口Queue的方法。
add(E e)方法:如果可以在不违反容量限制的情况下立即执行此操作,则将指定的元素插入此队列,成功时返回true,如果当前没有可用空间则抛出IllegalStateException。加入成功,那么就会放回true。这里用的是offer方法的实现
remove()检索并删除此队列的头部。如果元素不存在就抛出NoSuchElementException异常。这里用的是poll方法的实现。
element()检索返回但不删除此队列的头部。用的是peek()方法。
clear()方法在while里面调用poll()直到返回null。
addAll(Collection extends E> c)方法需要Collection参数是非空的,还有不能包含自己,遍历调用add方法,如果修改了,就是modified=true。
上面就是AbstractQueue中的方法。
然后,我看看队列的定义吧。
队列,又称为伫列(queue),是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。
队列的操作方式和堆栈类似,唯一的区别在于队列只允许新数据在后端进行添加。
有什么讨论的内容,可以加我公众号: