本篇文章主要讲的是Queue接口,以及它的3个常用实现类之一的LinkedList,其实它的常用实现类还有几个,不过都是java.util.concurrent 包下面的,后面讲多线程的时候会专开一个系列来写。

先来看看Queue接口中声明的常用方法,有关数据的基础用法真的离不开增删改查。

「增加:」
offer[XXX](E e)add[xxx](E e)push(E e)「删除:」
remove[XXX]()poll[XXX]()pop()「查询:」
peek[XXX+]()在这个系列的上一篇文章也提到过LinkedList 是实现了2个List 和Queue 接口,有关LinkedList 的结构以及Node 结点的结构可以看看上篇文章。
offer[xxx]

add[xxx]

push

可以发现最后本质都是调用了linkFirst 或者linkLast ,由于两者的实现接近相同,仅以linkFirst 举例



remove[XXX]」


poll[XXX]()」

pop()」

可以看到无论是删除头节点还是尾结点,核心都是调用了unlinkxxx 方法,查看unlinkFirst源码,注意在分析这段代码的时候unlink传入的参数要么是first要么是last 。




可以看到peek 要么是查看头元素,要么是查看尾元素,所以直接返回first或者last 对应的值就好了。