一点一点看JDK源码(六)java.util.LinkedList前篇之链表概要

liuyuhang原创,未经允许禁止转载

本文举例使用的是JDK8的API

目录:一点一点看JDK源码(〇)

1.什么是链表 

  链表是一种常见的数据结构,属于一种线性表。

  虽说链表是线性表,但是其储存的方式并非是线性的,而是节点(Node)方式存储的。

  每一个节点都含有一个指针,指向下一个节点。

  同时每一个节点都存有自身的数据信息。

  

  链表有点像衣服的拉链,是一个扣一个的,每两个之间都有一个间隔,要想获取某个位置的数据,

  必须逐个获取下一个节点。

  由此,链表的数据添加,默认是添加在该链的末尾的,并不需要获得该链表的所有数据,不需要知道

  链表的长度,也不需要获取链表的全部索引之类的东西。

  因此链表中的数据创建和尾插入效率是极高的,又因为没有一个获取全部索引的方式,因此在链表

  中要查询某些内容,必须一个一个寻找,难以获得某个位置的信息,查询较慢

  虽然说链表是一环扣一环的,但是首节点可以获得次节点信息,依次递归能够获得整个链表的所有信息。

  所以,实际上链表是一种递归结构,首节点实际上存有所有节点的信息了。

  不放图了,自行百度或百科!!

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的一些特性。

  • LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。
  • LinkedList 实现 List 接口,能对它进行队列操作。
  • LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。
  • LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。
  • LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。
  • LinkedList 是非同步的。

关于java中LinkedList的设计,下篇在更!

自己手写了个链表,代码比较少,可以看下

算法是什么(二)手写个链表(java)

以上!

一点一点看JDK源码(六)java.util.LinkedList前篇之链表概要的更多相关文章

  1. JDK1.8源码(六)——java.util.LinkedList 类

    上一篇博客我们介绍了List集合的一种典型实现 ArrayList,我们知道 ArrayList 是由数组构成的,本篇博客我们介绍 List 集合的另一种典型实现 LinkedList,这是一个有链表 ...

  2. JDK1.8源码(六)——java.util.ArrayList类

    ArrayList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现了RandomAccess接口,支持快速随机访问,实际上就是通过下标序号进行快速访问,实现了Clonea ...

  3. JDK1.8源码(二)——java.util.LinkedList

      LinkedList定义 LinkedList 是链表实现的线性表(双链表),元素有序且可以重复. public class LinkedList<E> extends Abstrac ...

  4. 一点一点看JDK源码(〇)

    一点一点看JDK源码(〇) liuyuhang原创,未经允许进制转载 写在前面: 几乎所有的大神都会强调看源码,也强调源码的重要性: 但是如何看源码,源码看什么?看了什么用?看了怎么用? 困扰很多人, ...

  5. 一点一点看JDK源码(二)java.util.List

    一点一点看JDK源码(二)java.util.List liuyuhang原创,未经允许进制转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 List译为表,一览表, ...

  6. 一点一点看JDK源码(三)java.util.ArrayList 前偏

    一点一点看JDK源码(三)java.util.ArrayList liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 ArrayLi ...

  7. 一点一点看JDK源码(四)java.util.ArrayList 中篇

    一点一点看JDK源码(四)java.util.ArrayList 中篇 liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 在前篇中 ...

  8. 一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach

    一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 代 ...

  9. 一点一点看JDK源码(五)java.util.ArrayList 后篇之sort与Comparator

    一点一点看JDK源码(五)java.util.ArrayList 后篇之sort与Comparator liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JD ...

随机推荐

  1. PAT 1034. Head of a Gang[bug]

    有一个两分的case出现段错误,真是没救了,估计是要写bfs的形式,可能栈溢出了 #include <cstdio> #include <cstdlib> #include & ...

  2. 利用setTimeoutc处理javascript ajax请求超时

    用过jquery的人都知道里面的$.ajax能设置超时处理及各种错误的抛出,确实好用.原生的js没有对应的方法,还得写各种兼容.在实际运用中,不管请求是否成功都应该做容错处理, 不然用户不知道到底发生 ...

  3. SPOJ QTREE5

    题意 一棵\(n\)个点的树,点从\(1\)到\(n\)编号.每个点可能有两种颜色:黑或白. 我们定义\(dist(a,b)\)为点\(a\)至点\(b\)路径上的边个数. 一开始所有的点都是黑色的. ...

  4. Web前端面试指导(十三):css样式的优先级是怎么样的?

    题目点评 CSS样式的优先级规则给人的感觉总是摸不透,更不用说怎么去表达了,在网络上流传着很多版本,描述的都很复杂也不全面,看了之后还是不满意.我来给大家介绍一个比较系统.全面有比较容易记住的规则吧! ...

  5. js基本数据类型和引用类型的区别详解-笔记

    原文参考http://mp.weixin.qq.com/s/apFyUgqT5N-bsDUjP4Eryg 笔记总结 首先记住js中的基础数据类型undefined,null,boolean,strin ...

  6. <head>标签和它的小伙伴们

    head标签是HTML文档中最基本的必须元素之一(body:对,还有我): <html> <head> <title>文档的标题</title> < ...

  7. div 居中方法汇总

    本文是从简书复制的, markdown语法可能有些出入, 想看"正版"和更多内容请关注 简书: 小贤笔记 情况一: 父子容器宽高已知 方法一 html <div class= ...

  8. c++开发ocx入门实践二

    原文:http://blog.csdn.net/yhhyhhyhhyhh/article/details/51374355         IDE:vs2010,c++,测试工具,vs自带的TstCo ...

  9. Springmvc ajax跨域请求处理

    上次给一个网站写网站  前后端分离 最后跪在ajax跨域上面了  自己在网上找了个方法  亲试可用  记录一下 写一个类  继承HandlerInterceptorAdapter package co ...

  10. 信用卡精养卡POS机方案

    所谓的精养卡,就是模仿有钱人的一种方式,提额难吗!真心不难,难就难在养卡消费 ,信用卡都有,但是不同费率的POS机你有吗,没有POS机难道你真的要去花费去消费吗,你消费的起吗?所以我们这个行业就出现了 ...