Java之集合(五)LinkedList
转载请注明源出处:http://www.cnblogs.com/lighten/p/7298017.html
1.前言
Java中另一个常见的list就是本章将要讲的LinkedList。ArrayList的实现方式是数组,而LinkedList的实现方式是链表。两者在性能上有着明显的不同,之前讲过ArrayList的特点就是易于查找,弱于插入,而LinkedList正好相反。这些都是和其数据结构有关,具体使用哪个,需要看操作数组的主要方向是查找还是插入了。
2.AbstractSequentialList
LinkedList并没有直接继承自AbstractList,而是继承自抽象父类AbstractSequentialList,其是继承自AbstractList的。AbstractSequentialList出现的原因在于其较于AbstractList对于"random access"(随机访问)方面更有优势。其只定义了如下方法:

这些都是针对于链表结构的相关方法,而具体实现不像ArrayList的那样直接操作数组的下标(链表没有下标)。这些实现都是通过listIterator这个抽象方法完成的:


其它方法就不再一一列出,顺带一提的是,其返还的迭代器就是ListIterator。这些就是AbstractSequentialList的全部内容了。
3LinkedList
LinkedList继承自AbstractSequentialList,同时实现了List、Deque和Cloneable接口。其结构也一样的简单明了。数据结构如下:

一个元素个数,一个头结点,一个尾结点。由于是链表,所以其是不需要扩容的,先看看Node的相关结构吧。

很简单的结构,前一个结点的引用,下一个结点的引用和本结点的内容。这是一个双向链表。

这是一个简单的插入到最前的一个实现:获取当前第一个元素,生成插入元素,替换成头结点。如果当前第一个元素为null,尾结点自然也就是头结点了,否者原头结点持有插入在其前面的结点的引用。其它的操作也基本与此类似,不再进行叙述,最后会给出一个图来看其操作。
有意思的是LinkedList和ArrayList一样并没有使用父类的方法,而是重写了一套。所以其并没有使用迭代器完成get,remove等操作。

node方法做了一点小优化:

根据结点位置是在前半还是后半决定是顺序遍历还是逆序遍历,这样尽可能的减少遍历次数。
最后看看迭代器,其实也没什么可看的了:

定位到指定结点位置,然后对其进行操作罢了。逆序的迭代器实现就更简单了:

最后值得一提的是,LinkedList并没有像ArrayList一样重写了SubList方法,所以其使用的还是抽象父类AbstractList实现的方法。
4.示意图

移除操作类似,这里不再给出示意图。
Java之集合(五)LinkedList的更多相关文章
- Java自学-集合框架 LinkedList
Java集合框架 LinkedList 序列分先进先出FIFO,先进后出FILO FIFO在Java中又叫Queue 队列 FILO在Java中又叫Stack 栈 示例 1 : LinkedList ...
- Java集合(五)--LinkedList源码解读
首先看一下LinkedList基本源码,基于jdk1.8 public class LinkedList<E> extends AbstractSequentialList<E> ...
- 【Java集合】LinkedList详解前篇
[Java集合]LinkedList详解前篇 一.背景 最近在看一本<Redis深度历险>的书籍,书中第二节讲了Redis的5种数据结构,其中看到redis的list结构时,作者提到red ...
- Java小白集合源码的学习系列:LinkedList
目录 LinkedList 源码学习 LinkedList继承体系 LinkedList核心源码 Deque相关操作 总结 LinkedList 源码学习 前文传送门:Java小白集合源码的学习系列: ...
- Java学习-集合(转)
在编写java程序中,我们最常用的除了八种基本数据类型,String对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!java中集合大家族的成员实在是太丰富了,有常用的ArrayList. ...
- 浅谈Java的集合框架
浅谈Java的集合框架 一. 初识集合 重所周知,Java有四大集合框架群,Set.List.Queue和Map.四种集合的关注点不同,Set 关注事物的唯一性,List 关注事物的索引列表,Q ...
- 算法篇(前序)——Java的集合
菜鸟拙见,望请纠正:附上JDK参考文档(中文文档和英文文档):链接:https://pan.baidu.com/s/14KDmCtQxeGCViq7e0zENjA 密码:e9xs 以及算法篇全文链接 ...
- JAVA基础--JAVA API集合框架(其他集合类,集合原理)15
一.ArrayList介绍 1.ArrayList介绍 ArrayList它是List接口的真正的实现类.也是我们开发中真正需要使用集合容器对象. ArrayList类,它是List接口的实现.肯定拥 ...
- Java重要类之LinkedList
一.ArrayList与LinkedList 基本概念:List是一个接口,Arraylist和LinkedList是它的两个实现类,只是实现的方式不一样.我在“单链表java实现”一文中已经对单链表 ...
随机推荐
- Windows命令行参数(不断更新)
这里先讲一下系统变量: 注意:一旦将路径加入到环境变量Path中,那么运行它下面的程序的时候就不用非得指定到目标路径中,直接键入命令就行了. 1.type命令:打开并读取文件里面的内容. C:\Use ...
- 百度上传插件 WebUploader初始使用
引入资源 使用Web Uploader文件上传需要引入三种资源:JS, CSS, SWF. <!--引入CSS--> <link rel="stylesheet" ...
- struts2 file
JavaBean 中: private File[] pic; private String[] picContentType; private String [] picFileName; sett ...
- excel如何设置自增序列
见图1 见图2 4,如果内容对您有所帮助,请打赏---1毛就足够感动我,诚信交友~
- HDU1254 推箱子(BFS) 2016-07-24 14:24 86人阅读 评论(0) 收藏
推箱子 Problem Description 推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推 ...
- EBS FORM 编译
http://www.cnblogs.com/quanweiru/archive/2013/01/01/2841574.html EBS R11============================ ...
- html.EditorForModel自定义模版
https://www.cnblogs.com/lori/p/5969658.html http://www.cnblogs.com/yinzixin/archive/2012/12/18/2821 ...
- 【转】【译】【Win10】在你的程序标题栏中显示后退按钮
原文地址:http://www.sharpgis.net/post/2015/05/21/Displaying-a-backbutton-in-your-app-window 免责声明:这篇文章基于 ...
- [Openwrt 项目开发笔记]:MySQL配置(六)
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在本人的项目中,运行在路由器上的服务器采用Ngi ...
- NPOI 导出excel 通用方法
public static byte[] ExportExcel<T>(Dictionary<string, string> columnsHeader, List<T& ...