站点图标 江湖人士

Java源码之LinkedList

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

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

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

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

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

退出移动版