Java源码之LinkedList

关于LinkedList

似乎我们在工作中很少用到LinkedList,大部分都是使用ArrayList。先来看一下LinkedList的定义吧,它是List和Deque接口的双向链表实现;实现所有可选列表操作,并允许所有元素(包括null);所有的操作都实在操作双向列表;索引到列表中的操作将从开始或结束遍历列表,以更接近指定的索引为准。从这个义来看,这个LinkedList更适合较多插入和删除元素,较少读取元素,由于插入和删除元素不涉及重排数据。

至于Deque是什么。Deque是支持两端元素插入和移除的线性集合,而名称deque是双端队列(double ended queue)的缩写,一般发音为deck。既然它是个列表,那它的确 继承了Queue,也支持所有与Queue相关的进、出方法。本文不再对deque做详细说明。

LinkedList主要成员变量

下面是LinkedList的主要成员变量。可以看到包含头指针和尾指针,而Node也是双向链表节点的表明,也就是说LinkedList真的是双向链表表明的。

Java源码之LinkedList

LinkedList核心方法

LinkedList的主要方法如下所示。可以看到这些方法都是对链表的操作,包括向头、尾插入节点,向一个节点之前插入节点,删除头尾、中间节点等。

Java源码之LinkedList

Java源码之LinkedList

Java源码之LinkedList

List常用方法

为什么叫List常用方法,由于LinkedList是双向队列,包含队列操作,这节不予说明。下面列出了add、remove、get这三个常用方法。从前两个方法可以看到它用到了上节介绍的核心方法;而get方法可以看到是一个遍历搜索的方法,可以明显的发现如果这个列表的get方法在使用中频繁出现,那么我们应该选择ArrayList而不是LinkedList。

Java源码之LinkedList

Java源码之LinkedList

Deque常用方法

与上节类似,由于LinkedList实现了Deque接口,包含队列和栈操作,这节将介绍几个常用的队列和栈操作。

下面列出了peek、poll、offer、push、pop这五个常用方法。peek方法直接返回头节点,poll方法等同于第三节介绍的unlinkFirst方法,offer方法最终等同于linkLast,push方法等同于addFirst方法,而addFirst方法实际上等同于第三节介绍的linkFirst方法,pop方法最终等同于unlinkFirst。peek、poll、offer这三个方法实现了队列这一先入先出的数据结构,而push、pop这两个方法实现了栈这一先入后出的数据结构。

Java源码之LinkedList

Java源码之LinkedList

总结一下

LinkedList作为一个平时不常使用的类其结构是比较简单的。由于其内部表明为链表结构,所以核心方法均为链表操作。进而所有的主要方法都是由这些核心方法扩展而来。

本文只介绍几个常用的方法,实际上LinkedList中包含了许多其他方法,例如:addFirst、addLast、removeLast、offerFirst、offerLast等等,实际上都是由本文第三节介绍的核心方法扩展或者仅仅是改了名字,有兴趣的同学可以详细学习一下,我这里就不详细介绍了。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
宝蓝的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容