这是关于LinkedList的第二篇文章,我将会源码分析LinkedList的部分重要代码,关键地方我都有注释说明,希望大家能比较明白的看懂!

分析源码按照顺序分析:

  • 变量
  • 构造方法
  • 方法

一、变量

注意:如果一个链表没有节点,那么first和last都为null

二、构造方法

三、方法

1、linkFirst(E e)

方法描述:将e这个节点加入链表头

注意:

  • 头节点的pre指针指向的是null,并没有指向尾节点,所以并不是循环双向链表。
  • 如果当前链表只有一个节点,那么first和last指针均指向该节点

2、linkLast(E e)

方法描述:将e这个节点加入链表尾

注意:

  • 尾节点的next指针指向的是null,并没有指向头节点,所以并不是循环双向链表。
  • 如果当前链表只有一个节点,那么first和last指针均指向该节点

3、linkBefore(E e, Node succ)

方法描述:将e这个节点加入到不为空的succ节点之前

注意:

  • 该方法是往【succ节点】前加节点,所以需要判断该节点是否是头节点,原因是需要更改first这个指针指向的节点

步骤:

  • 构造新的节点,它的prev指向【succ节点】的前一个节点,它的next指向【succ节点】
  • 【succ节点】的prev指向新的节点
  • 【succ节点】的前一个节点的next指向新节点

4、unlinkFirst(Node f)

方法描述:去掉不为空的头节点

注意:

  • 如果【f节点】不是头结点,那么【f节点】之前【包括f节点】都将从链表中断开丢掉,只是size的减一存在问题

步骤:

  • first指针指向【下一个节点】
  • 【f节点】的next不再指向【下一个节点】

5、unlinkLast(Node l)

方法描述:去掉不为空的尾节点

注意:

  • 如果【l节点】不是尾结点,那么【尾节点】之后【包括l节点】都将从链表中断开丢掉,只是size的减一存在问题

步骤:

  • last指针指向【上一个节点】
  • 【上一个节点】的next指向null

6、unlink(Node x)

方法描述:去掉不为空的【x节点】

步骤:

  • 【上一个节点】的next指针指向【下一个节点】,【x节点】prev指向null
  • 【下一个节点】的prev指针指向【上一个节点】,【x节点】next指向null

7、简单方法的概括

8、add(E e)

方法描述:向链表插入1个元素

注意:

  • add方法默认是加元素加入【尾节点】

9、remove(Object o)

方法描述:移除链表中某个节点

注意:

  • 这里判断了【被移除元素】是否为null的情况,为空则==即可,如果不为null,则需要equals来判断是否相等
  • == 和 equals的区别小伙伴们有兴趣可以查一查

10、addAll

方法描述:添加新的节点到链表中

11、clear()

方法描述:清除链表

【Java集合】LinkedList详解中篇的更多相关文章

  1. java集合框架详解

    java集合框架详解 一.Collection和Collections直接的区别 Collection是在java.util包下面的接口,是集合框架层次的父接口.常用的继承该接口的有list和set. ...

  2. Java集合框架详解(全)

    一.Java集合框架概述 集合可以看作是一种容器,用来存储对象信息.所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下. 数组与集合的区别如下 ...

  3. Java—集合框架详解

    一.描述Java集合框架 集合,在Java语言中,将一系类的对象看成一个整体. 首先查看jdk中的Collection类的源码后会发现Collection是一个接口类,其继承了java迭代接口Iter ...

  4. Java集合-----List详解

    List中的元素是有序排列的而且可重复 1.LinkedList LinkedList是非线程安全的,底层是基于双向链表实现的       LinkedList常用方法:     toArray()  ...

  5. JAVA集合类型详解

    一.前言 作为java面试的常客[集合类型]是永恒的话题:在开发中,主要了解具体的使用,没有太多的去关注具体的理论说明,掌握那几种常用的集合类型貌似也就够使用了:导致这一些集合类型的理论有可能经常的忘 ...

  6. Java的LinkedList详解,看源码之后的总结

    1. LinkedList实现了一个带表头的双向循环链表: 2. LinkedList是线程不同步的: 3. LinkedList中实现了push.pop.peek.empty等方法,因此Linked ...

  7. Java集合-----Set详解

    Set是没有重复元素的集合,是无序的 1.HashSet HashSet它是线程不安全的       HashSet常用方法:   add(E element)  将指定的元素添加到此集合(如果尚未存 ...

  8. Java集合-----Map详解

          Map与Collection并列存在.用于保存具有映射关系的数据:Key-Value      Map 中的 key 和  value 都可以是任何引用类型的数据      Map 中的 ...

  9. 【Java集合】LinkedList详解前篇

    [Java集合]LinkedList详解前篇 一.背景 最近在看一本<Redis深度历险>的书籍,书中第二节讲了Redis的5种数据结构,其中看到redis的list结构时,作者提到red ...

随机推荐

  1. 【转】OracleOraDb11g_home1TNSListener服务启动后又停止了

    源地址:https://www.cnblogs.com/Asa-Zhu/p/3819605.html 一.错误描述 登陆PL/SQL Developer登陆本地数据库时先报没有监听程序,查看服务发现O ...

  2. Python中实现简单的插件框架

    在系统设计中,经常我们希望设计一套插件机制,在不修改程序主体情况下,动态去加载附能. 我设想的插件系统: 1.通过类来实现 2.自动查找和导入 我们假设需要实现一个简单的插件系统,插件可以接收一个参数 ...

  3. EOS 智能合约 plublic key 转换

      在做一个EOS 的action接口时,定义如下: void setbplist(const account_name bp_name, const uint64_t bp_time, const ...

  4. [jvm]基于jvm的线程实现

    一.线程的实现 学过操作系统的肯定都知道: 进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位. 线程:是进程的一个执行单元,是进程内可调度实体. ...

  5. 条目十《了解分配子(allocator)的约定和限制》

    条目十<了解分配子(allocator)的约定和限制> 在STL标准库中,分配子的存在有点怪异. 一开始的设计意图是提供一个内存模型的抽象,让使用库者库忽略操作系统的near指针和far指 ...

  6. Flask 项目结构(仅供参考)

    project/ app/ # 整个程序的包目录 static/ # 静态资源文件 js/ # JS脚本 css/ # 样式表 img/ # 图片 favicon.ico # 网站图标 templat ...

  7. C++_代码重用5-类模板

    如果两种类只是数据类型不同,而其他代码是相同的,与其编写新的类声明,不如编写一种泛型(独立于类型的)栈.然后将具体的类型作为参数传递给这个类.这样就可以使用通用的代码生成存储不同类型值的栈. 可以使用 ...

  8. 毕业设计 python opencv实现车牌识别 码云地址

    码云地址:https://gitee.com/yinghualuowu/Python_VLPR 删除了冗余代码,可以更加便于运行.其实是为了那些进不去github准备的~

  9. Heap — 20181120

    363. Trapping Rain Water public class Solution { /** * @param heights: a list of integers * @return: ...

  10. PIE SDK地图图层控制

    1. 功能简介 地图图层控制就是图层的相关操作,如地图图层数据的添加.删除.移动和拖拽等功能. 2. 功能实现说明 2.1. 实现思路及原理说明 第一步 图层添加是调用AddLayer方法将图层添加到 ...