一点一点看JDK源码(六)java.util.LinkedList前篇之链表概要html
liuyuhang原创,未经容许禁止转载java
本文举例使用的是JDK8的API算法
1.什么是链表 数组
链表是一种常见的数据结构,属于一种线性表。数据结构
虽然说链表是线性表,可是其储存的方式并不是是线性的,而是节点(Node)方式存储的。函数
每个节点都含有一个指针,指向下一个节点。post
同时每个节点都存有自身的数据信息。url
链表有点像衣服的拉链,是一个扣一个的,每两个之间都有一个间隔,要想获取某个位置的数据,spa
必须逐个获取下一个节点。设计
由此,链表的数据添加,默认是添加在该链的末尾的,并不须要得到该链表的全部数据,不须要知道
链表的长度,也不须要获取链表的所有索引之类的东西。
所以链表中的数据建立和尾插入效率是极高的,又由于没有一个获取所有索引的方式,所以在链表
中要查询某些内容,必须一个一个寻找,难以得到某个位置的信息,查询较慢。
虽说链表是一环扣一环的,可是首节点能够得到次节点信息,依次递归可以得到整个链表的全部信息。
因此,实际上链表是一种递归结构,首节点实际上存有全部节点的信息了。
不放图了,自行百度或百科!!
2.链表的构成要素
根据链表的定义模式,链表的构成要素的本质,是节点(Node)的设计。对于链表的全部特性,都是基于
Node自己或对Node的操做而造成的。
Node的构成模式简单说有几种:
2.1.Node含有数据变量,下一个节点的指针;
2.2.Node含有数据变量,下一个节点的指针,上一个节点的指针;
2.3.Node含有数据变量,下一个节点的指针,上一个节点的指针;最后一个节点的指针指向首节点;
2.4.Node含有数据变量,下一个节点的指针,上一个节点的指针;自身惟一的序号(inde)或索引(hash)
以上列举的四种方式中,特性是有所变化的。
2.1.所指本质上是一个单向链表。
2.2.所指本质上是一个双向链表。
2.3.所指本质上是一个环形链表(首尾相接的噬身之蛇的感受),能够是自身的结构,能够是插入数据时构成。
2.4.所指本质上是一个下降建立效率,提升查询效率的链表数组,或链表hash。
同时,根据链表的指针定义方式,指针数量,指针标准的不一样,能够有诸多的性质。
如线性链表,非线性链表。
树形链表,图性链表。
单向链表,双向链表,环形链表。
3.链表的操做构成
链表虽然是一种数据结构,本质上也是容器,做为容器,一定有须要通常容器性操做。如:
建立,新增,插入,删除,修改,查询,清空,转换,排序,遍历等基础操做。
又由于链表的自身特性,能够有一些特性操做。如:
获取首元素,获取尾元素。
获取上一个元素,获取下一个元素。
弹出首元素,弹出尾元素。
同时也能够用一些自定义的方式来获取链表元素,如节点分组获取,如跳跃式获取等,看脑洞有多大了!
4.java的链表实现java.util.LinkedList
下面列举一些java中LinkedList的一些特性。
关于java中LinkedList的设计,下篇在更!
本身手写了个链表,代码比较少,能够看下
以上!