1 前言
本篇文章主要讲的是Queue接口,以及它的3个常用实现类之一的LinkedList,其实它的常用实现类还有几个,不过都是java.util.concurrent 包下面的,后面讲多线程的时候会专开一个系列来写。
先来看看Queue接口中声明的常用方法,有关数据的基础用法真的离不开增删改查。
1.1 常用方法
增加:
offer[XXX](E e)add[xxx](E e)push(E e)
删除:
remove[XXX]()poll[XXX]()pop()
查询:
peek[XXX+]()
2 LinkedList
在这个系列的上一篇文章也提到过LinkedList 是实现了2个List 和Queue 接口,有关LinkedList 的结构以及Node 结点的结构可以看看上篇文章。
2.1 增加
-
offer[xxx] -
add[xxx] -
push可以发现最后本质都是调用了
linkFirst或者linkLast,由于两者的实现接近相同,仅以linkFirst举例
2.2 删除
-
remove[XXX]
-
poll[XXX]() -
pop()可以看到无论是删除头节点还是尾结点,核心都是调用了
unlinkxxx方法,查看unlinkFirst源码,注意在分析这段代码的时候unlink传入的参数要么是first要么是last。
2.3 查看
可以看到peek 要么是查看头元素,要么是查看尾元素,所以直接返回first或者last 对应的值就好了。